CLLocationManager 和 tvOS - RequestWhenInUseAuthorization() 不提示

Posted

技术标签:

【中文标题】CLLocationManager 和 tvOS - RequestWhenInUseAuthorization() 不提示【英文标题】:CLLocationManager and tvOS - RequestWhenInUseAuthorization() not prompting 【发布时间】:2015-11-16 15:20:45 【问题描述】:

让 tvOS 提示用户进行位置数据授权似乎有点麻烦。我从字面上复制并粘贴了 ios 的工作代码,它似乎没有提示用户。我正在使用下面列出的代码以及带有字符串值的 NSLocationWhenInUseUsageDescription 键。我看到的 api 的唯一区别是在 iOS 上它使用 startupdatinglocation() 而在 tvOS 上它使用 requestLocation()(类似于 watchOS)我已经解决了这个问题,它实际上是在点击 requestWhenInUseAuthorization() 但根本没有提示用户。

知道发生了什么吗?

import UIKit
import CoreLocation
class ViewController: UIViewController 
  var locationManager = CLLocationManager()

  override func viewDidLoad() 
  super.viewDidLoad()

  locationManager.delegate = self
  locationManager.desiredAccuracy = kCLLocationAccuracyBest

  if CLLocationManager.locationServicesEnabled()

    if CLLocationManager.authorizationStatus() == CLAuthorizationStatus.NotDetermined
      locationManager.requestWhenInUseAuthorization()
    
    else if CLLocationManager.authorizationStatus() == CLAuthorizationStatus.AuthorizedWhenInUse
      locationManager.requestLocation()
    

  


【问题讨论】:

【参考方案1】:

事实证明,需要 CFBundleDisplayName 键和 $(PRODUCT_NAME) 值才能显示提示。

【讨论】:

您可以在自己的答案中发布一个示例吗? 在我的情况下,我的 Info.plist 文件中缺少 NSLocationWhenInUseUsageDescription 键。 添加CFBundleDisplayName 有帮助,谢谢!我希望他们在缺少重要的东西时简单地用断言杀死应用程序,而不是让我们猜测。

以上是关于CLLocationManager 和 tvOS - RequestWhenInUseAuthorization() 不提示的主要内容,如果未能解决你的问题,请参考以下文章

CLLocationManager:没有调用 didChangeAuthorization 和 didRangeBeacons

如何接收和使用 AVPlayer 的语音命令? (tvOS,迅速)

tvOS:如何处理 TabBar 和 UICollectionView 之间的焦点更改并防止崩溃

关注 tvOS 上的 UICollectionViewCells

CLLocationManager 和 iPhone 中的航向度数

CLLocationManager,核心数据和数组