1. Antecedentes del problema
- Cuando el dispositivo se ha conectado correctamente en la aplicación
- Modificar el nombre del dispositivo
- El nombre del dispositivo escaneado por la aplicación sigue siendo el nombre anterior
- La forma de obtener el nombre en el código de la aplicación es (perpheral.name)
2. Análisis de problemas
Cuando la APLICACIÓN es el centro para conectarse a otros dispositivos Bluetooth.
Después de que la primera conexión sea exitosa, la caché de periféricos se registrará en el sistema iOS.
La próxima vez que vuelva a buscar, cuando busque el dispositivo Bluetooth, imprimirá directamente (periférico.nombre) y obtendrá el nombre de Bluetooth en la memoria caché anterior.
Si el dispositivo Bluetooth actualiza el nombre durante este período, el parámetro (periférico.nombre) no cambiará, por lo que debe obtener el nombre del dispositivo de otra manera. Hay un campo en el paquete de datos de transmisión llamado kCBAdvDataLocalName, que puede obtener el nombre del dispositivo actual en tiempo real.
3. Resolución de problemas
Las soluciones para OC y Swift se dan a continuación:
jefe
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI{
NSString *localName = [advertisementData objectForKey:@"kCBAdvDataLocalName"];
}
Rápido
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
let localName = advertisementData["kCBAdvDataLocalName"]
}