porque por mis los funcionan detecta configurar conectar conectan con como celular beats audifonos apagan objective-c bluetooth bluetooth-lowenergy core-bluetooth ios-bluetooth

objective-c - por - mis audifonos bluetooth no se conectan con mi celular



iOS cómo descubrir los auriculares bluetooth y sus eventos (2)

Estoy tratando de descubrir "Auriculares Bluetooth" y obtener sus eventos. Leí la documentación "CoreBluetooth" e implementé el código de muestra de la siguiente manera. No didDiscoverPeripheral método de delegado '' didDiscoverPeripheral ''.

¿Hay alguna solución para esto?

Código:

CBCentralManager *myCentralManager; [myCentralManager scanForPeripheralsWithServices:nil options:nil]; -(void)centralManagerDidUpdateState:(CBCentralManager *)central{ //following line prints CBCentralManagerStatePoweredOn NSLog(@"state:%@", [self getCentralManagerState:central.state]); } //following method does not fire -(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { }


CoreBluetooth.framework es para Bluetooth Low-Energy.
Bluetooth Low-Energy no está diseñado para pasar el sonido (auriculares de salida, parlantes, etc.)
Entonces mi pregunta es: ¿está seguro de que su auricular usa Bluetooth de baja energía?
No lo creo.

Por lo tanto, es por eso que el método de delegado centralManager:didDiscoverPeripheral: no se desencadena.

Si desea obtener algunos eventos de los auriculares, como "usuario presiona la siguiente canción", puede usar los eventos de control remoto . Como sospecho que es posible que desee escuchar "otros eventos", supongo que su auricular está bajo MFI. Entonces puede tener su propio protocolo. Por ejemplo, trabajé en la aplicación iOS para un HeadSet Bluetooth que tenía otras funcionalidades, como llamar a un número favorito, etc. Pero, entonces, necesitarás usar ExternalAccessory.framework , y quizás tengas que aplicar ingeniería inversa al protocolo.


Como se menciona, CoreBluetooth es solo para dispositivos LE,
así que esto es lo que hice para obtener los eventos para dispositivos BluetoothHFP :
1. necesitas abrir AVAudioSeesion:
enlace AVFoundation.framework a su proyecto
2. para las entradas disponibles actuales:

NSArray *availInputs = [[AVAudioSession sharedInstance] availableInputs];

3. para notificación sobre cambio de ruta:
a. configurar nueva AVAudioSession
segundo. registrar observador en AVAudioSessionRouteChangeNotification

- (BOOL)prepareAudioSession { // deactivate session BOOL success = [[AVAudioSession sharedInstance] setActive:NO error: nil]; if (!success) { NSLog(@"deactivationError"); } // set audio session category AVAudioSessionCategoryPlayAndRecord options AVAudioSessionCategoryOptionAllowBluetooth success = [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:nil]; if (!success) { NSLog(@"setCategoryError"); } // activate audio session success = [[AVAudioSession sharedInstance] setActive:YES error: nil]; if (!success) { NSLog(@"activationError"); } return success; }

y llámalo cuando quieras comenzar a escuchar cambios:

[self prepareAudioSession]; NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; [defaultCenter addObserver:self selector:@selector(bluetoothAvailabilityDidChange:) name:@"BluetoothConnectabilityChangedNotification" object:nil];

  1. si desea obtener las devoluciones de llamada mientras está en segundo plano, debe agregar Audio y AirPlay en las capacidades del objetivo:

!! Esta respuesta fue útil para mí cuando obtuve la solución