Ios CLLocationManager:DidDeterministate:forRegion未调用
我正在使用GoogleMapsSDK为iOS和CoreLocation框架的区域监控实现iOS7应用程序。注册监控区域后,调用requestStateForRegion方法,但我对设备上的DidDeterministate:forRegion方法(iOS7.0.4,iPhone5S)没有反应 它可以接收didUpdateLocation方法,所以我认为委派过程工作正常。在模拟器上,正确调用了:forRegion方法 我应该如何解决此问题? 初始化代码如下所示 谢谢你的建议。提前谢谢Ios CLLocationManager:DidDeterministate:forRegion未调用,ios,objective-c,ios7,core-location,Ios,Objective C,Ios7,Core Location,我正在使用GoogleMapsSDK为iOS和CoreLocation框架的区域监控实现iOS7应用程序。注册监控区域后,调用requestStateForRegion方法,但我对设备上的DidDeterministate:forRegion方法(iOS7.0.4,iPhone5S)没有反应 它可以接收didUpdateLocation方法,所以我认为委派过程工作正常。在模拟器上,正确调用了:forRegion方法 我应该如何解决此问题? 初始化代码如下所示 谢谢你的建议。提前谢谢 - (voi
- (void)viewDidLoad
{
if (locManager == nil ) {
locManager = [CLLocationManager new];
}
locManager.delegate = self;
CLLocationCoordinate2D targetCenter;
targetCenter.latitude = LATITUDE_CENTER;
targetCenter.longitude = LONGITUDE_CENTER;
CLLocationDegrees radius = TARGET_RADIUS;
if ( locManager.maximumRegionMonitoringDistance < TARGET_RADIUS ){
radius = locManager.maximumRegionMonitoringDistance;
}
self.targetRegion = [[CLCircularRegion alloc]
initWithCenter:targetCenter
radius:radius
identifier:@"TargetRegion"];
BOOL monitoringAvailability = [CLLocationManager isMonitoringAvailableForClass:[self.targetRegion class]];
if( monitoringAvailability ) {
if( [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized ) {
[locManager startMonitoringForRegion:self.targetRegion];
}
}
[locManager requestStateForRegion:self.targetRegion];
}
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
if (state == CLRegionStateInside){
NSLog(@"is in target region");
self.isInTargetRegion = YES;
}else{
NSLog(@"is out of target region");
self.isInTargetRegion = NO;
}
}
-(void)viewDidLoad
{
if(locManager==nil){
LocationManager=[CLLocationManager新建];
}
locManager.delegate=self;
CLLocationCoordination2D目标中心;
targetCenter.latitude=纬度\中心;
targetCenter.longitude=经度\中心;
CLLocationDegrees半径=目标半径;
if(LocaManager.maximumRegionMonitoringDistance<目标半径){
半径=LocaManager.maximumRegionMonitoringDistance;
}
self.targetRegion=[[CLCircularRegion alloc]
initWithCenter:targetCenter
半径:半径
标识符:@“TargetRegion”];
BOOL监控可用性=[CLLocationManager IsMonitoringAvailable for类:[self.targetRegion类]];
if(监控可用性){
if([CLLocationManager授权状态]==kCLAuthorizationStatusAuthorized){
[LocalManager startMonitoringForRegion:self.targetRegion];
}
}
[locManager requestStateForRegion:self.targetRegion];
}
-(void)locationManager:(CLLocationManager*)manager:(CLRegionState)地区的州:(CLRegion*)地区
{
如果(状态==CLRegionStateInside){
NSLog(@“位于目标区域”);
self.isInTargetRegion=是;
}否则{
NSLog(@“超出目标区域”);
self.isInTargetRegion=否;
}
}
我自己找到了答案
在iPhone设备上,
设置->常规->后台应用程序刷新
启用应用程序的后台应用程序刷新,然后正确调用应用程序。我自己找到了答案 在iPhone设备上, 设置->常规->后台应用程序刷新
启用应用程序的后台应用程序刷新,然后正确调用DidDetermingEstate。在iOS 8中,您需要使用
[CLLocationManager requestAlwaysAuthorization]
提示输入KClautorizationStatusAuthorizationDalways
。您还需要在Info.plist文件中有一个NSLocationAlwaysUsageDescription
条目。在iOS 8中,您需要使用[CLLocationManager requestAlwaysAuthorization]
提示输入KClautorizationStatusAuthorizationDalways
。您还需要在Info.plist文件中有一个NSLocationAlwaysUsageDescription
条目。我想知道startMonitoringForRegion是否失败,所以我检查了LocalManager.monitoredRegions,然后发现已正确启动监视。我想知道startMonitoringForRegion是否失败,因此,我检查了locManager.monitoredRegions,然后发现已正确启动监视。这也会导致CLBeaconRegion出现问题isMonitoringAvailableForClass:
返回YES
即使思想背景AppRefresh已关闭。但是苹果的位置和地图编程指南指出,在这种情况下,它应该返回NO
。@Tobias,isMonitoringAvailableForClass:
的行为是正确的。isMonitoringAvailableForClass:
方法告诉您底层硬件是否支持对指定类的区域监视。这与后台应用程序刷新无关。@reecon-谢谢你提供的信息。只要重新阅读文档,它就清楚地说明了硬件。它还说我可以通过调用[UIApplication backgroundRefreshStatus]
来检查后台刷新状态。我应该仔细看看。我认为要点与isMonitoringAvailableForClass:
方法有关。这也会导致CLBeaconRegion出现问题isMonitoringAvailableForClass:
返回YES
即使思想背景AppRefresh已关闭。但是苹果的位置和地图编程指南指出,在这种情况下,它应该返回NO
。@Tobias,isMonitoringAvailableForClass:
的行为是正确的。isMonitoringAvailableForClass:
方法告诉您底层硬件是否支持对指定类的区域监视。这与后台应用程序刷新无关。@reecon-谢谢你提供的信息。只要重新阅读文档,它就清楚地说明了硬件。它还说我可以通过调用[UIApplication backgroundRefreshStatus]
来检查后台刷新状态。我应该仔细看看。我认为要点与isMonitoringAvailableForClass:
方法有关。