WatchKit WatchOS - Apple Watch 上从未显示定位服务提示
Posted
技术标签:
【中文标题】WatchKit WatchOS - Apple Watch 上从未显示定位服务提示【英文标题】:WatchKit WatchOS - Location Services Prompt never displayed on the Apple Watch 【发布时间】:2021-01-22 18:37:02 【问题描述】:当我从 Watch 应用程序调用 requestWhenInUseAuthorization()
时,定位服务提示永远不会显示给用户:无论是在 Watch 应用程序中,还是在 iPhone 应用程序中。
NSLocationWhenInUseUsageDescription
键。
我还尝试在后台模式下添加定位服务(适用于 iPhone 和 Watch Extension)。
我们怎样才能在手表上显示提示?这甚至可能吗?我不一定要让我的用户打开他们的 iPhone 应用来管理应用中的请求位置。
import SwiftUI
import CoreLocation
struct ContentView: View
@StateObject var watchLocationManager = WatchLocManager()
var body: some View
Button("Request location") watchLocationManager.requestAuthorization()
.onAppear
watchLocationManager.setupLocationManager()
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
class WatchLocManager: NSObject, ObservableObject
private var locationManager = CLLocationManager()
func setupLocationManager()
self.locationManager.delegate = self
self.locationManager.activityType = .otherNavigation
self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
self.locationManager.distanceFilter = 20.0
func requestAuthorization()
self.locationManager.requestWhenInUseAuthorization()
extension WatchLocManager: CLLocationManagerDelegate
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager)
print("⌚️ locationManagerDidChangeAuthorization: \(manager.authorizationStatus.rawValue)")
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
print(locations)
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
print(error)
【问题讨论】:
【参考方案1】:iPhone 和 Watch 共享隐私>定位服务设置。如果应用在 iPhone 上已经有授权状态,它就不会在 Watch 上再次询问。
设置设置>隐私>LocationServices>YourApp>允许位置访问>下次询问。
然后打开 Watch 应用。
要求的步骤
New Project>WatchOS>带有WatchApp的iOS应用
填写产品名称,无其他变化
保存在 Mac 文件夹中
将struct ContentView
和struct ContentView_Previews
替换为您的代码。
ContentView.swift
文件位于 AppName
文件夹下。
添加到上述文件的Target Membership
AppName WatchKit Extension
。我在File Inspector
中通过选中该框进行了此操作。
转到AppName WatchKit Extension
文件夹下的ContentView.swift
文件并删除(取消选中)文件的Target Membership
到AppName WatchKit Extension
。 (如果你不这样做,你会得到一个副本)
在AppName WatchKit Extension
文件夹下将NSLocationWhenInUseUsageDescription
添加到Info.plist
。
确保选择了AppName WatchKit App
方案。
按下播放键。等到加载完毕……
按下“请求位置”按钮
【讨论】:
我也试过了。不在我这边工作。当我选择询问时,按钮什么也不做。 您的代码适用于 Simulator Xcode 12.3。一定有其他因素影响它。 我在 Xcode 12.3、iOS 14.3、WatchOS 7.2 & 6.2.3 & 5.3 中再次尝试。我这边没有成功。从全新安装开始,我启动应用程序,然后单击按钮从 Watch 模拟器请求访问权限,但没有任何反应……您能分享一下对您有用的方法吗? 见上文。我添加了我采取的步骤。 对我来说,它是在我在 WatchKit 扩展常规设置中激活“支持在不安装 iOS 应用程序的情况下运行”后开始工作的。以上是关于WatchKit WatchOS - Apple Watch 上从未显示定位服务提示的主要内容,如果未能解决你的问题,请参考以下文章
在 WatchKit 项目中无法识别 presentAudioRecordingControllerWithOutputURL
如何在 WatchKit 扩展目标(XCode7 beta 6)中重置 watchOS 部署目标
使用 Xcode 8 和 watchOS3 配置 WatchKit 应用程序扩展
如何以swift语言在watchKit中为gyroActive或gyroAvailable编码?
在 App-Group 文件夹中创建领域文件在 WatchOS(WatchKit 扩展)下不起作用
WatchOS 错误 HumanReadableNSError: 运行目标 iPhone 12 Pro Max 对运行方案 MYAPP WatchKit App 无效