在info.plist
:
我们添加了NSLocationAlwaysUsageDescription
。
在required background modes
我们添加了所有蓝牙内容(与蓝牙通信和共享数据)和位置 - "register for location updates"
我们已导入location and bluetooth frameworks
和基础。
我们正在开始使用蓝牙:
if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
{
[self.locationManager requestAlwaysAuthorization];
}
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.beaconRegion.notifyOnEntry=YES;
self.beaconRegion.notifyOnExit=YES;
self.beaconRegion.notifyEntryStateOnDisplay=YES;
[self.locationManager requestAlwaysAuthorization ];
[self.locationManager requestWhenInUseAuthorization];
NSUUID *uuid_in = [[NSUUID alloc] initWithUUIDString:uuid];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid_in identifier:@"com.name.us"];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
代表被称为:
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
NSLog(@"started:%@",region);
//[self.locationManager requestStateForRegion:self.beaconRegion];
self.beaconRegion.notifyEntryStateOnDisplay=YES;
}
问题是当我们打开硬件信标(与其他应用程序一起工作检查)时,代表没有被调用(iPhone6):
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
答案 0 :(得分:2)
一些提示:
你应该只做这两个中的一个。如果你有第一行,摆脱第二行。 (你上面重复了第一行。)
[self.locationManager requestAlwaysAuthorization]; [self.locationManager requestWhenInUseAuthorization];
无需特殊的背景模式。
不需要蓝牙框架。
您正在修改CLBeaconRegion
,然后才能进行初始化。以self.beaconRegion.notifyOnEntry=YES;
开头的行需要向下移动到初始化之后。
确保uuid_in
中定义的ProximityUUID与您的信标实际匹配。请发布如何初始化的代码,以便我们确定。
尝试卸载并重新安装您的应用。确保首次启动时提示您输入位置权限并接受。如果没有收到提示,那就出错了。
答案 1 :(得分:1)
要检查的事情:
在隐私设置中,请确保您的应用已选中“允许位置访问”。我不确定当你在你的代码中调用这两个时会发生什么:
[self.locationManager requestAlwaysAuthorization ];
[self.locationManager requestWhenInUseAuthorization];
确认UUID是否传递给initWithProximityUUID。这需要匹配您感兴趣的信标。
将monitoringDidFailForRegion添加到您的代码中,看看你得到了什么......
(void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error {
NSLog(error);
}