-1

因此,我正在寻找一种方法来从受监视区域中删除 BeaconRegion,具体取决于它与我当前位置的距离。我虽然可以使用中心属性,但我认为我遗漏了一些东西......因为纬度/经度值无效......

po [region center]
(latitude = 0.0000000000000000000000000000000000000000000000000000000033891907065820605, longitude = 0.000000000000000000000000000000000000059293723668713039) 

如何根据 con currentLocation 删除 BeaconRegion?

4

2 回答 2

2

CLBeaconRegion是的,您可以根据用户所在的位置停止监控。 但是正如您所发现的,center该对象的属性不会帮助您做到这一点(请参阅@Daij-Djan 的答案以了解原因。)

您想要的典型方法是在设置信标监控的同时设置接收重大位置更改CLLocationManager如下所示:

[locationManager startMonitoringSignificantLocationChanges];

delegate然后,您CLLocationManager可以在每次用户显着更改位置时将如下方法添加到您的方法中以获取回调:

- (void)locationManager:(CLLocationManager *)locationManager
      didUpdateLocations:(NSArray *)locations {
   CLLocation* location = [locations lastObject];
   NSLog(@"latitude %+.6f, longitude %+.6f\n",
          location.coordinate.latitude,
          location.coordinate.longitude);
   // TODO: change the monitored beacon regions depending on the
   // location.coordinate.latitude and location.coordinate.longitude     
   }
}

请注意,您还需要确保您的应用程序已授权定位服务以使其正常工作,并将与NSLocationAlwaysUsageDescription密钥对应的字符串放入您的 plist 中,但无论如何您都需要执行相同的检查来监控信标:

if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [locationManager requestAlwaysAuthorization];
}

有关重大位置更改的更多详细信息,请参见此处: https ://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html

于 2015-05-17T21:00:48.290 回答
1

一个 CLBeaconRegion 代表 N 个具有相同 uuid 的蓝牙信标。ibeacon 没有 gps 坐标。它具有 RSSI 值(信号强度)和“计算的”邻近属性,但没有位置。

与wifi路由器相同;)有将信标/wifi路由器与GPS位置相关联的服务,但这不是标准的。信标应该怎么知道?:)


在 IOS 上,CLBeaconRegion 类只有一个 center 属性,因为它是 CLRegion 的子类

如果您知道您所在地区的 GPS 位置,则使用该数据 + 您设备的位置

于 2015-05-17T19:58:04.633 回答