2017-09-26 79 views
2

當我設置關閉藍牙,然後我用CBCentralManager獲得藍牙的狀態是這樣的:iOS11藍牙有一些奇怪的事情

self.bluetoothManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; 

系統會顯示這樣的警告:system alert

藍牙的當前狀態是CBManagerStatePoweredOff。但是當我在控制中心關閉藍牙時,即使藍牙的當前狀態仍然是CBManagerStatePoweredOff,此警報也不再顯示。

如何在這種情況下提醒用戶打開藍牙?

回答

0

您可以通過執行以下代表方法提醒用戶。

//Bluetooth state delegation 
#pragma mark - CBCentralManagerDelegate 

- (void)centralManagerDidUpdateState:(CBCentralManager *)central 
{ 
    NSString *stateString = nil; 
    switch(self.CBManager.state) 
    { 
     case CBManagerStateResetting: 
     stateString = @"The connection with the system service was momentarily lost, update imminent."; 
     break; 
     case CBManagerStateUnsupported: 
     stateString = @"The platform doesn't support Bluetooth Low Energy."; break; 
     case CBManagerStateUnauthorized: stateString = @"The app is not authorized to use Bluetooth Low Energy."; 
     break; 
     case CBManagerStatePoweredOff: 
     stateString = @"Bluetooth is currently powered off."; 
     break; 
     case CBManagerStatePoweredOn: 
     [self.beaconManager startMonitoringForRegion:self.museumsRegion]; 
     [self.beaconManager startRangingBeaconsInRegion: self.museumsRegion]; 
     break; 
     case CBManagerStateUnknown: 
     stateString = @"State unknown, update imminent."; 
     break; 
    } 
    NSLog(@"%@", stateString); 
} 

現在應該自動通知用戶。

+0

當您在設置中關閉藍牙時,將調用此代理方法,系統將自行顯示提醒。當您在控制中心關閉藍牙時,此代理方法也會被調用,但系統不會顯示警報。如果用這種方法提醒用戶,可能會同時顯示兩個警報。 –

+0

這也可能是你必須現在放置信息plist NSBluethoothInUse隱私密鑰並設置一個字符串值。我以爲我在iOS 11中閱讀了一些關於此的內容。 –

+0

您沒有明白。 –

0

您可以通過在選項字典中使用CBCentralManagerOptionShowPowerAlertKey來禁用系統藍牙警報。

NSDictionary *options = @{CBCentralManagerOptionShowPowerAlertKey: @NO}; 
self.bluetoothManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:options]; 

然後你就可以使用deleget方法centralManagerDidUpdateState:彈出你自定義的警報。