我正在开发一个与硬件设备连接的BLE
(蓝牙LE)应用程序。
我能够发现并连接到设备,从设备读取数据,将数据写入设备。
我在Apple的BLE文档中找不到的是,当你靠近设备时,当应用程序关闭时,你怎么能收到通知。
我知道如何注册characteristic
通知,但只有当应用在后台时才会发出此通知。
我知道iBeacon
可以在应用关闭时检测到蓝牙并发送通知,但我希望在设备发现某个带有UUID
的BLE时收到通知。
iBeacon,正在使用带有UUID
和major and minor
字段的BLE,我不需要/不需要。我想注册来自BLE的某个UUID
的通知。
我这样做了,没有任何回应:
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
[self initRegion];
- (void)initRegion
{
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"4AD3FADF-F179-4343-0000-000000000000"];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"BLE-NAME"];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
NSLog(@"ENTER");
}
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
[self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];
NSLog(@"EXIT");
}
答案 0 :(得分:2)
虽然iBeacon和一般BLE外设都使用蓝牙,但它们在iOS中的处理方式不同。
CoreBocation框架支持iBeacons(根据您的问题中的代码),而核心蓝牙框架支持实现GATT配置文件的BLE外设。
Core Bluetooth Programming Guide描述了如何发现和连接BLE外设。该指南还包括关于后台处理的部分。
基本上,您可以向目标外围设备发出“连接”,即使您的应用程序在后台,iOS也会在看到外围设备时完成连接 - 调用您的委托方法来告知您连接。
然而,虽然许多iBeacons可以配置相同的UUID,但外围设备的UUID是唯一的,因此除非您之前发现了外围设备,否则您可能无法发出连接。
您可以在后台扫描广告特定服务的外围设备,并使用它来发现和连接外围设备