我正在开发一个具有信标区域监控功能的应用程序.Below是监控信标区域的代码。
-(void)setBeaconMonitoringForUUID:(NSString *)strID withMajor:(NSString *)strMajor withMinor:(NSString *)strMinor withIdentifier:(NSString *)strIdentifier {
NSUUID *strUUID = [[NSUUID alloc] initWithUUIDString:strID];
CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:strUUID major:[strMajor intValue] minor:[strMinor intValue] identifier:strIdentifier];
[beaconRegion setNotifyEntryStateOnDisplay:YES];
[beaconRegion setNotifyOnEntry:YES];
[beaconRegion setNotifyOnExit:YES];
[self.objLocationManager startMonitoringForRegion:beaconRegion];
[self.objLocationManager startRangingBeaconsInRegion:beaconRegion];}
并且locationManager初始化如下
- (id)init
{
self = [super init];
if (self != nil)
{
self.objLocationManager = [CLLocationManager new];
self.objLocationManager.delegate = self;
self.objLocationManager.distanceFilter = 10.0;
self.objLocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
self.objLocationManager.allowsBackgroundLocationUpdates = YES;
if ([self.objLocationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[self.objLocationManager requestAlwaysAuthorization];
}
[self.objLocationManager startUpdatingLocation];
}
return self;
}
现在的问题是监控信标区域iOS设备必须启用蓝牙或其工作而不打开蓝牙吗?。我也参考下面的链接但是没有关于启用蓝牙进行区域监控的解释 Determining the Availability of Region Monitoring
我已经使用kontakt.io beacon进行了测试,并且在没有打开设备上的蓝牙的情况下无法正常工作但是当我读到区域监控正在进行定位服务时,为什么我们需要启用bluetooth.so每个信标需要打开蓝牙或它特定于kontakt.io灯塔?
答案 0 :(得分:2)
Apple在iOS 11中进行了更改,因此即使用户在控制中心禁用蓝牙,操作系统仍会执行
上述声明对于iOS 10.x及更早版本不适用,其中在控制中心关闭蓝牙将禁用信标检测。正如@ Paulw11在其回答中所述,您还必须在手机上启用位置,并且应用必须先从应用获取动态位置许可才能检测到信标。
同样适用于所有版本的iOS,如果您转到设置 - >蓝牙和禁用蓝牙,它将禁用信标检测。
答案 1 :(得分:1)
iBeacons使用蓝牙低功耗自我宣传,因此必须打开iOS设备上的蓝牙设置才能接收信号。
由于信标的检测可以用于通过将信标的检测与信标的已知位置相关联来确定用户的位置,因此您必须获得用户使用其位置的许可。