[英]How to scan 'Lower Energy Bluetooth Device' in minimize mode by using Core Bluetooth Framework?
我正在制作一个ios应用程序,该应用程序在iPhone的应用程序的``最小化''模式和``前台''(活动)模式下扫描BLE设备。 在前景模式下,它可以正常工作,但如果应用程序进入最小化模式,则扫描无法工作。
我还添加了“必需的背景模式”键
- (void)viewDidLoad
{
[super viewDidLoad];
CBCentralManager *centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[centralManager scanForPeripheralsWithServices:nil options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @YES}];
self.centralManager = centralManager;
}
// method called whenever the device state changes.
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
// Determine the state of the peripheral
if ([central state] == CBCentralManagerStatePoweredOff) {
NSLog(@"CoreBluetooth BLE hardware is powered off");
}
else if ([central state] == CBCentralManagerStatePoweredOn) {
NSLog(@"CoreBluetooth BLE hardware is powered on and ready");
}
else if ([central state] == CBCentralManagerStateUnauthorized) {
NSLog(@"CoreBluetooth BLE state is unauthorized");
}
else if ([central state] == CBCentralManagerStateUnknown) {
NSLog(@"CoreBluetooth BLE state is unknown");
}
else if ([central state] == CBCentralManagerStateUnsupported) {
NSLog(@"CoreBluetooth BLE hardware is unsupported on this platform");
}
}
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
NSLog(@"AdvertisementData:%@",advertisementData);
}
首先,你应该等待,直到你得到centralManagerDidUpdateState:
回调与响应状态CBCentralManagerStatePoweredOn
你曾经打电话之前scanForPeripheralsWithServices:options:
。 实际上,您目前甚至能够在前台进行扫描,实在令人惊讶。
但是要注意的其他主要问题是,只要应用程序不在前台,就会忽略CBCentralManagerScanOptionAllowDuplicatesKey
标志,并且扫描间隔会降低到前台的1/60。 因此,您需要确保中央设备之前没有发现外围设备,并且需要更长的时间在后台留出足够的时间。 只要用户授予您的应用程序在后台运行的权限,其他所有操作都应该可以。 仅确保您的测试过程有效,并且不要尝试查看重复的外围设备。
为了使应用程序在后台继续扫描,您需要使用以下方法: scanForPeripheralsWithServices:options:
指定要扫描的服务,否则将无法正常工作。 对于前景扫描,它不是必需的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.