【发布时间】:2016-09-17 05:17:02
【问题描述】:
如何从非 UI 类(iOS 8 及更高版本)获得用户访问定位服务的权限?无论我做什么 - requestWhenInUseAuthorization 都不会提醒用户。我正在使用目标 c。
我也在 plist 文件中添加了密钥。
LocationController.h
@interface LocationController : NSObject <CLLocationManagerDelegate>{
BOOL _debug;
}
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *location;
- (id)initWithDebug:(BOOL)debug_flag;
@end
LocationController.m
@implementation LocationController {
}
@synthesize debug, locationManager, location;
#define IOS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
- (id)initWithDebug:(BOOL)debug_flag {
self = [super init];
if (self) {
[self findLocation];
}
return self;
}
-(void) findLocation{
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
[self checkLocationPermissions];
self.location = self.locationManager.location;
}
-(void)checkLocationPermissions {
if ([CLLocationManager locationServicesEnabled]) {
if (IOS_8_OR_LATER) {
[self.locationManager requestWhenInUseAuthorization];
} else {
[self.locationManager startUpdatingLocation];
}
}
}
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
switch (status) {
case kCLAuthorizationStatusNotDetermined: {
[self.locationManager startUpdatingLocation];
} break;
case kCLAuthorizationStatusDenied: {
[self.locationManager stopUpdatingLocation];
} break;
case kCLAuthorizationStatusAuthorizedWhenInUse:
case kCLAuthorizationStatusAuthorizedAlways: {
[self.locationManager startUpdatingLocation];
} break;
default:
break;
}
}
@end
编辑: 代码到达 [self.locationManager requestWhenInUseAuthorization];但从不显示警报。
此代码是从 SDK 中的 blockOperation 调用的。 SDK初始化为单例
【问题讨论】:
-
看看这个答案可能会有所帮助:http://stackoverflow.com/a/24063578/5575752
-
感谢@RonakChaniyara 的帮助。我以前看过那个。我猜我的问题是因为我用来获取位置的非 UI 类
-
您使用的是什么 SDK? SDK初始化为单例?
-
@Sanjuju 我正在开发自己的 SDK,是的,SDK 被初始化为单例
标签: objective-c ios8 cllocationmanager cllocation