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
CoreBluetooth ist NUR für Bluetooth Low-Energy und Samsung HM1700 ist kein Bluetooth Low-Energy-Gerät. – Larme
Ic ... ist es möglich, einen Delegierten für Bluetooth-Headsets zu haben? –
http://stackoverflow.com/questions/20896528/how-to-find-bluetooth-audio-devices-in-ios – Larme