我想检测位置服务是否已启用,并且我想在我的应用中启用或禁用该按钮。为此,我写了
if([CLLocationManager locationServicesEnabled])
// Enable button
else
// Disbale button
但是,我发现这种方法有一种奇怪的行为。来自设置,
1)如果我关闭位置服务,对于除上述方法之外的所有应用程序,返回NO。(正如预期的那样)
2)如果我打开locationServices,但是关闭我的特定应用程序,而不是返回YES。
这是正确的行为吗?如果是,那么是否有任何其他方法可以在应用级别查找位置服务是启用还是撤消。任何想法。
答案 0 :(得分:0)
当您使用locationServicesEnabled
方法查找是否为您的应用启用了位置服务时,我想清除locationServicesEnabled
检测是否为设备启用了位置服务。它不会检查特定的应用程序。
从Apple Docs 它返回一个布尔值,指示是否在设备上启用了位置服务
您可以使用locationManager:didFailWithError:
来检测特定应用的位置服务
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
if ([[error domain] isEqualToString: kCLErrorDomain] && [error code] == kCLErrorDenied) {
// Location Services are denied.
}
}
答案 1 :(得分:0)
您应该检查CLLocationManager
的{{3}}属性,看看您的应用是否有权访问位置信息 -
if ([CLLocationManager locationServicesEnabled] && (CLLoctionManager.authorizationStatus == kCLAuthorizationStatusAuthorized)) {
// Enable button
}
else {
// Disable button
}
答案 2 :(得分:0)
使用此
+(BOOL)checkLocationService {
if (![CLLocationManager locationServicesEnabled])
return NO; //location service disabled
else if(kCLAuthorizationStatusAuthorized!=[CLLocationManager authorizationStatus])
return NO; //app's location service disabled
return YES;
}