iOS 应用位置权限当前不起作用

Posted

技术标签:

【中文标题】iOS 应用位置权限当前不起作用【英文标题】:iOS App Location Permission is not Working Currently 【发布时间】:2016-08-23 16:26:41 【问题描述】:

这是我的通用 ViewController 类,我研究了这个问题ios app doesn't ask for location permission,我已经有了NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription

@IBOutlet weak var ownMapView: MKMapView!

let locationManager : CLLocationManager = CLLocationManager();


override func viewDidLoad() 
    super.viewDidLoad();

    self.locationManager.delegate = self;
    self.locationManager.requestWhenInUseAuthorization();
    self.locationManager.startUpdatingLocation();


func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) 
    guard status == .AuthorizedWhenInUse else
    
        print("Location not using");
        return;
    

    print("Location using.");
    ownMapView.showsUserLocation = true;
    

即使我添加了 NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription 这对我也不起作用。它只打印“未使用的位置”

如何正确请求?

【问题讨论】:

第一次运行时,状态应该是“未确定”,你应该得到一个权限弹出窗口。你得到那个弹出窗口了吗? 第一次尝试我选择了不允许选项,然后程序从不询问位置允许请求。 我的意思是应用程序的第一次运行 尝试从设备/模拟器中删除应用并再次运行 我现在正在尝试删除并再次运行它 【参考方案1】:

要正确理解这一点,请查看 CLLAuthorizationStatus 文档: https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/#//apple_ref/c/tdef/CLAuthorizationStatus

CLAuthorizationStatus 有几个可能的值:

NotDetermined - 用户尚未决定允许/拒绝使用位置 受限 - 应用仅限使用位置 Denied - 用户拒绝使用位置信息。 AuthorizedAlways - 此应用有权随时启动定位服务。 AuthorizedWhenInUse - 应用被授权在前台运行时启动大多数定位服务

您只检查“AuthorizedWhenInUse”状态,但您首先启动它的状态是未确定。

您可以进一步检查如下状态:

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) 

        if status  == .NotDetermined
        
            print ("Loction use not determined")
            return
        
        if status  == .Denied
        
            print ("Location determined")
            return
        
        guard status == .AuthorizedWhenInUse else
        
            print("Location not using");
            return;
        

        print("Location using.");
        ownMapView.showsUserLocation = true;
    

【讨论】:

【参考方案2】:

我们是否在 plist 中添加了 NSLocationAlwaysUsageDescription 和 NSLocationWhenInUseUsageDescription? .添加这些,它会工作。

【讨论】:

“我已经有 NSLocationAlwaysUsageDescription 和 NSLocationWhenInUseUsageDescription” - 他已经这样做了 是的先生,我已经添加了这两个描述

以上是关于iOS 应用位置权限当前不起作用的主要内容,如果未能解决你的问题,请参考以下文章

react-native中iOS上的位置权限不起作用

iOS(5)模拟器上的当前位置不起作用?

为啥在 iOS 9.3 中杀死/终止应用程序后后台位置不起作用

stopUpdatingLocation 在 iOS 7 中不起作用

当前位置更新在 iphone 设备中不起作用

React-native:- 位置权限对话框不起作用