2014-11-23 88 views
0

我正在研究BLE(蓝牙LE)应用程序,该应用程序与硬件设备连接。 我能够发现并连接到设备,从设备读取数据,将数据写入设备。从BLE设备获取通知

我在苹果的BLE文档中找不到什么东西,当你靠近设备,应用程序靠近时,如何获得通知。

我知道如何注册到characteristic通知,但只有当应用程序在后台时才会发生此通知。

我知道iBeacon可以在应用程序关闭时检测到蓝牙,并发送通知,但是当设备发现某个的某个BLE时,我想要收到通知。

iBeacon,正在使用BLE UUIDmajor 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"); 
} 

回答

1

虽然iBeacon显示和一般的BLE外围设备都使用蓝牙,它们是不同的内部监督办公室处理。

CoreLocation框架(根据您的问题中的代码)支持iBeacon,而实现GATT配置文件的BLE外围设备由Core Bluetooth框架支持。

Core Bluetooth Programming Guide描述了如何发现并连接到BLE外设。该指南还包含有关后台处理的部分。

实质上,您可以向目标外设发出“连接”,当外围设备被看到时,即使您的应用程序在后台,iOS也会完成连接 - 调用您的委托方法来告知连接。

但是,尽管许多iBeacons可以使用相同的UUID进行配置,但外设的UUID是唯一的,所以除非您以前发现外设,否则您可能无法发出连接。

您可以扫描在后台广告特定服务的外围设备,并使用它来发现并连接到外围设备