ios 未提示在应用程序中启用位置服务

nzkunb0c  于 11个月前  发布在  iOS
关注(0)|答案(5)|浏览(127)

**更新:**这不是一个重复.我已经添加了所需的关键到info.plist中所述在我原来的问题和问题仍然存在.我已经尝试了所有三个键在各种组合.

在任何人感到不安之前,我已经阅读了许多Apple Dev论坛帖子和堆栈溢出帖子,无法弄清楚为什么我的应用程序拒绝提示用户允许使用时授权。
我将以下键添加到Info.plist文件中,并附带一个String值:

NSLocationWhenInUseUsageDescription

字符串
然后我写了(用Swift和Obj-C)应该提示用户的代码:

@property CLLocationManager *location;
...
@synthesize location;
...
location = [[CLLocationManager alloc] init];
location.delegate = self;

location.desiredAccuracy = kCLLocationAccuracyBest;
location.distanceFilter = kCLDistanceFilterNone;

[location requestWhenInUseAuthorization];
[location startUpdatingLocation];

I'm using the following CLLocationManagerDelegate methods.
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
- (void) locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status


这基本上是直接从苹果的“LocateMe”示例代码中复制的。
无论我尝试什么样的序列或微小的更改,应用程序都不会提示允许授权。我使用switch语句来确定[CLLocationManager authorizationStatus]的状态,但不断收到“未确定”的响应。

if ([CLLocationManager locationServicesEnabled]) {
        switch ([CLLocationManager authorizationStatus]) {
            case kCLAuthorizationStatusAuthorizedAlways:
                NSLog(@"Always Authorized");
                break;
            case kCLAuthorizationStatusDenied:
                NSLog(@"Denied");
                break;
            case kCLAuthorizationStatusAuthorizedWhenInUse:
                NSLog(@"Authorized in Use");
                break;
            case kCLAuthorizationStatusNotDetermined:
                NSLog(@"Not Determined");
                break;
            case kCLAuthorizationStatusRestricted:
                NSLog(@"Restricted");
                break;
        }

    }


我正在运行Xcode 6.2(6C 101)与iOS 8.1.2物理设备和iOS 8.2(12 D5452 a)模拟器进行测试。

9gm1akwq

9gm1akwq1#

如果您在iPhone模拟器中更改了位置设置,这可能会导致提示不显示。例如,如果您已经通过允许位置访问iOS提示符设置了位置权限,并做出了决定,这将存储在iPhone模拟器的隐私设置中,因此随后对locationManager.requestAlwaysAuthorization()locationManager.requestWhenInUseAuthorization()的调用将不会显示iOS提示符,因为您已经定义了隐私->应用的位置设置。
要清除iPhone模拟器的设置:"iOS Simulator" -> "Reset Content and Settings..."
此外,我在Xcode中做了一个干净的构建,并在某个时候退出并重新启动iPhone模拟器,我可能会错误地认为这部分有任何帮助。

cl25kdpy

cl25kdpy2#

我面临着完全相同的问题,在挖掘了两天后,原来应用程序不读取项目导航器窗格中包含的包中的info.plist文件,因为它已本地化为另一种语言,并且正在使用基本国际化,这意味着在MySQL中将有3个info.plist文件:
1-在“测试”文件夹下
2-在base.lproj文件夹下
3-在ar.lprj下(ar指阿拉伯语)。
项目从bundle中的bundle中读取base.lproj的版本,而bundle中的bundle不包含在项目导航器的窗格中。
我所做的是,我采取了一个备份副本的plist文件,我想(上面的第2条),并删除了项目导航器中的info.plist文件的本地化,并选择从磁盘删除以完全删除它,然后我将备份副本放在项目的根目录下,并将其导入Xcode,现在,项目从新的info.plist文件中读取数据,关键字NSLocationWhenInputUsageDescription在应用程序启动时触发用户授权警报。
希望这对你有帮助。

zwghvu4y

zwghvu4y3#

我发现在你的info.plst文件中,你不能使用 Privacy - Location Usage Description 键,你必须有一个名为NSLocationWhenInUseUsageDescription的键和一个值。
x1c 0d1x的数据

#import <MapKit/MapKit.h>

@interface ViewController ()

@property CLLocationManager * location;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _location = [[CLLocationManager alloc] init];

    self.location.delegate = self;
    self.location.desiredAccuracy = kCLLocationAccuracyBest;
    self.location.distanceFilter = kCLDistanceFilterNone;

    [_location requestWhenInUseAuthorization];
    [self.location startUpdatingLocation];
}

字符串

tjrkku2a

tjrkku2a4#

这可能很傻,但我花了将近2个小时的时间,两次和三次检查所有我能找到的关于CLLocationManager权限的答案。
我觉得愚蠢的时候,我终于意识到,我有2个信息。plist文件,我用错了!
您可以检入项目的构建设置-有一个名为Info.plist File的值。
只是想把它留给未来的读者。

68bkxrlz

68bkxrlz5#

我浪费了1-2天的时间在这上面。只从info.plist更新在我的情况下不起作用。
如果你导航到TARGETS -> YOUR_APP_NAME -> Info section
您可以看到自定义iOS目标属性,在这里您可以看到目的字符串。更新位置,联系人,通知等的目的字符串。确保权限也在info.plist中可见。

相关问题