Minimal iOS BluetoothManager Ejemplo
He estado construyendo un ejemplo mínimo para detectar dispositivos Bluetooth cercanos utilizando el marco privado BluetoothManager en iOS 5.0.
Usando una respuesta encontrada en esta pregunta: Encontrar dispositivos Bluetooth genéricos al alcance
Aquí está mi método viewDidLoad para registrarme en BluetoothAvailabilityChangedNotification. También me registro en BluetoothDeviceDiscoveredNotification también.
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(bluetoothAvailabilityChanged:)
name:@"BluetoothAvailabilityChangedNotification"
object:nil];
btCont = [BluetoothManager sharedInstance];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(deviceDiscovered:)
name:@"BluetoothDeviceDiscoveredNotification"
object:nil];
Cuando recibo la notificación de cambio de disponibilidad de Bluetooth, configuro el escaneo del dispositivo habilitado, como se describe en una de las respuestas en el enlace mencionado anteriormente.
- (void)bluetoothAvailabilityChanged:(NSNotification *)notification
{
NSLog(@"BT State: %d", [btCont enabled]);
[btCont setDeviceScanningEnabled:YES];
}
Para completar, aquí está el método de notificación del dispositivo descubierto.
- (void)deviceDiscovered:(NSNotification *) notification
{
NSLog(@"Discovered one!");
}
Los registros producidos al ejecutar la aplicación de prueba son los siguientes:
BTM: attaching to BTServer
BTM: posting notification BluetoothAvailabilityChangedNotification
BT State: 1
BTM: setting device scanning enabled
esafortunadamente, el teléfono no capta ningún dispositivo Bluetooth, aunque sé que hay dispositivos detectables próximos (verificados usando un dispositivo Android).
Algunas cosas que ya he probado:
Calling [btCont setPowered: YES]; y registrarse para la notificación de cambio de estado de energía asociada, ejecutando setDeviceScanningEnabled: YES en la devolución de llamadaCalling [btCont resetDeviceScanning] antes de la llamada setDeviceScanningEnabledCalling the scanForConnectableDevices: (unsigned int) arg1; método, adivinando que arg1 puede ser algún tipo de valor de tiempo de espera. He probado una variedad de valores sin éxito.Cualquier pensamiento sería muy apreciado. ¡Gracias