2016-04-27 10 views
0

Ich versuche zu verfolgen, ob ein Bluetooth-Gerät auf einem iOS-Gerät verbunden ist oder nicht. Ich habe den folgenden Code verwendet:didConnectPeripheral wird nie

#import <Foundation/Foundation.h> 
#import <CoreBluetooth/CoreBluetooth.h> 


@interface scDeviceManager:NSObject <CBCentralManagerDelegate> 
@property (nonatomic, strong) CBCentralManager *centralManager; 

+ (scDeviceManager *) sharedInstance; 

@end 

#import "scDeviceManager.h" 


@implementation scDeviceManager 
@synthesize centralManager = _centralManager; 


+ (scDeviceManager *) sharedInstance { 

    static scDeviceManager *_sharedInstance=nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     _sharedInstance = [[self alloc] init]; 
    }); 

    return _sharedInstance; 
} 

- (id)init { 

    if (self = [super init]) { // equivalent to "self does not equal nil" 

     _centralManager=[[CBCentralManager alloc] initWithDelegate:self queue:nil]; 
     //also tried 
     //_centralManager=[[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()]; 

    } 
    return self; 
} 


- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral { 

    NSLog(@"Peripheral connected"); 
} 




- (void)centralManagerDidUpdateState:(CBCentralManager *)central{ 
    _log=[[Logger alloc] initWithClassName:NSStringFromClass([self class])]; 

    switch (central.state) { 
     case CBCentralManagerStatePoweredOff: 
      NSLog(@"CoreBluetooth BLE hardware is powered off."); 

      break; 
     case CBCentralManagerStatePoweredOn: 
      NSLog(@"CoreBluetooth BLE hardware is powered on and ready."); 
      [_centralManager scanForPeripheralsWithServices:nil options:nil]; 
      break; 
     case CBCentralManagerStateResetting: 
      NSLog(@"CoreBluetooth BLE hardware is resetting."); 
      break; 
     case CBCentralManagerStateUnauthorized: 
      NSLog(@"CoreBluetooth BLE state is unauthorized."); 
      break; 
     case CBCentralManagerStateUnknown: 
      NSLog(@"CoreBluetooth BLE state is unknown."); 
      break; 
     case CBCentralManagerStateUnsupported: 
      NSLog(@"CoreBluetooth BLE hardware is unsupported on this platform."); 
      break; 
     default: 
      NSLog([NSString stringWithFormat:@"Nothing to do: state (%ld).",(long)central.state]); 
      break; 
    } 
} 

@end; 

Irgendwann habe ich das Objekt scDeviceManager nennen:

scDeviceManager *deviceManager = [scDeviceManager sharedInstance]; 

Wenn ich/aktivieren diactivate die Bluetooth von iOS erhalte ich die Meldung:

2016-04-27 13: 33: 21.940 CoreBluetooth BLE-Hardware ist ausgeschaltet.

2016-04-27 13: 33: 24.046 CoreBluetooth BLE-Hardware ist eingeschaltet und bereit.

Das zeigt an, dass das Bluetooth aktiviert wurde und ich nach neuen Bluetooth-Geräten suche.

Wenn ich jedoch ein Bluetooth-Gerät (Samsung HM1700, Bluetooth-Headset) anschließen, wird die DidConnectPeripheral nicht aufgerufen. Sicherlich ist das Bluetooth-Gerät angeschlossen, da ich Musik hören kann.

In einem benutzerdefinierten iOS Schaltfläche ich die folgende Funktion

-(void) scanConnectedDevices{ 

    NSArray *inputs = [[AVAudioSession sharedInstance] availableInputs]; 
    for (AVAudioSessionPortDescription *port in inputs) 
    { 
     connectedAudioDevices[port.portType]=port; 
     NSLog(@"type:%@, name:%@",port.portyType,port.portName) 
    } 

} 

Und was ich ist erhalten nennen:

MicrophoneBuiltIn: iPhone Mikrofon

BluetoothHFP: HM1700

Dies zeigt an, dass das Gerät verbunden ist. Jedoch möchte ich durch einen Delegierten eine Ruhe von Code ausführen, wenn ich das Bluetooth-Gerät verbinden/trennen.

Dank

+0

CoreBluetooth ist NUR für Bluetooth Low-Energy und Samsung HM1700 ist kein Bluetooth Low-Energy-Gerät. – Larme

+0

Ic ... ist es möglich, einen Delegierten für Bluetooth-Headsets zu haben? –

+0

http://stackoverflow.com/questions/20896528/how-to-find-bluetooth-audio-devices-in-ios – Larme

Antwort

0

Ich kann sehen, wie einfach es ist, Dinge zu verwechseln ist;)

Was Sie tun: die Bluetooth-Instanz im Speicher grundsätzlich zu schaffen. Dann verbinden Sie durch die Einstellungen ein anderes Bluetooth-Gerät Ergebnis: Die 2 Dinge sind nicht zu jeder-andere in Verbindung stehend -> Ihr „Code“ nicht weiß nichts über das Headset Sie angeschlossenen Formular ein weiterer Ort, ...

Wenn Sie versuchen herauszufinden, ob ein anderes Bluetooth-Gerät angeschlossen ist: Wahrscheinlich müssten Sie Mitglied des MFI-Programms werden und dann könnten Sie sich mit Ihrem eigenen Headset verbinden.

Sonst, und so viel wie ich weiß, gibt es keine Möglichkeit auf iOS, nur angeschlossene "klassische" Bluetooth-Geräte "aufzulisten".