从BLE设备获取通知
问题描述:
我正在研究BLE
(蓝牙LE)应用程序,该应用程序与硬件设备连接。 我能够发现并连接到设备,从设备读取数据,将数据写入设备。从BLE设备获取通知
我在苹果的BLE文档中找不到什么东西,当你靠近设备,应用程序靠近时,如何获得通知。
我知道如何注册到characteristic
通知,但只有当应用程序在后台时才会发生此通知。
我知道iBeacon
可以在应用程序关闭时检测到蓝牙,并发送通知,但是当设备发现某个的某个BLE时,我想要收到通知。
iBeacon,正在使用BLE UUID
和major and minor
字段,我不需要/不想要。我只想注册一个来自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");
}
答
虽然iBeacon显示和一般的BLE外围设备都使用蓝牙,它们是不同的内部监督办公室处理。
CoreLocation框架(根据您的问题中的代码)支持iBeacon,而实现GATT配置文件的BLE外围设备由Core Bluetooth框架支持。
Core Bluetooth Programming Guide描述了如何发现并连接到BLE外设。该指南还包含有关后台处理的部分。
实质上,您可以向目标外设发出“连接”,当外围设备被看到时,即使您的应用程序在后台,iOS也会完成连接 - 调用您的委托方法来告知连接。
但是,尽管许多iBeacons可以使用相同的UUID进行配置,但外设的UUID是唯一的,所以除非您以前发现外设,否则您可能无法发出连接。
您可以扫描在后台广告特定服务的外围设备,并使用它来发现并连接到外围设备