Ios 检查Apple Watch当前是否未连接
我正在尝试使用以下代码检测用户的Apple watch当前是否处于活动状态:Ios 检查Apple Watch当前是否未连接,ios,watchkit,apple-watch,Ios,Watchkit,Apple Watch,我正在尝试使用以下代码检测用户的Apple watch当前是否处于活动状态: if WCSession.isSupported() { let session = WCSession.default session.delegate = self session.activate() } 但即使在我关闭手表电源后,我也会收到一个对会话的回调(\uSession:WCSession,ActivationIDComplete with activationState:WCSessi
if WCSession.isSupported() {
let session = WCSession.default
session.delegate = self
session.activate()
}
但即使在我关闭手表电源后,我也会收到一个对会话的回调(\uSession:WCSession,ActivationIDComplete with activationState:WCSessionActivationState,error:error?)
withactivationState==.activated
这是预期的吗?有没有办法检查手表和iPhone是否连接
EDIT:我还注意到,如果我在模拟器中运行相同的代码,我会得到与activationState=.activated完全相同的回调,而isPaired==false。对我来说,这听起来像是。activated
基本上是默认状态。我甚至不知道如何使停用
编辑2:我实际上没有WatchKit扩展,为了简单起见,我宁愿不创建一个。我只是想检测配对的手表是否在有效范围内,是否已通电并正在通信,这样我就可以知道我的应用程序本地通知是否可能会发送到手表。编辑
我理解你现在的要求。问题是,如果您选中isPaired
,即使应用程序已启动且手表未连接,也会得到正确答案
例如:
import WatchConnectivity
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if WCSession.isSupported() {
let session = WCSession.default
session.delegate = self
session.activate()
}
return true
}
}
extension AppDelegate: WCSessionDelegate {
func session(
_ session: WCSession,
activationDidCompleteWith activationState: WCSessionActivationState,
error: Error?) {
switch session.activationState {
case .notActivated:
print("Session no activated")
case .inactive:
print("Session inactive")
case .activated:
print("Session activated")
@unknown default:
break
}
if let err = error {
print("ERROR: \(err.localizedDescription)")
}
if session.isPaired {
print("Current phone is paired to an apple watch!")
}
print("reachable: \(session.isReachable)")
}
func sessionDidBecomeInactive(_ session: WCSession) {
print("Session just became inactive")
}
func sessionDidDeactivate(_ session: WCSession) {
print("session did deactivate")
}
}
这会在手表通电或断电时产生以下输出
Session activated
Current phone is paired to an apple watch!
reachable: false
注意isReachable
始终为false,因为您没有手表分机
现在看来,这个问题没有解决办法。我认为没有手表分机/应用程序,您无法确定此信息
另外请注意,您无法访问watch应用程序的外部 编辑
我理解你现在的要求。问题是,如果您选中isPaired
,即使应用程序已启动且手表未连接,也会得到正确答案
例如:
import WatchConnectivity
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if WCSession.isSupported() {
let session = WCSession.default
session.delegate = self
session.activate()
}
return true
}
}
extension AppDelegate: WCSessionDelegate {
func session(
_ session: WCSession,
activationDidCompleteWith activationState: WCSessionActivationState,
error: Error?) {
switch session.activationState {
case .notActivated:
print("Session no activated")
case .inactive:
print("Session inactive")
case .activated:
print("Session activated")
@unknown default:
break
}
if let err = error {
print("ERROR: \(err.localizedDescription)")
}
if session.isPaired {
print("Current phone is paired to an apple watch!")
}
print("reachable: \(session.isReachable)")
}
func sessionDidBecomeInactive(_ session: WCSession) {
print("Session just became inactive")
}
func sessionDidDeactivate(_ session: WCSession) {
print("session did deactivate")
}
}
这会在手表通电或断电时产生以下输出
Session activated
Current phone is paired to an apple watch!
reachable: false
注意isReachable
始终为false,因为您没有手表分机
现在看来,这个问题没有解决办法。我认为没有手表分机/应用程序,您无法确定此信息
另外请注意,您无法访问watch应用程序的外部 您正在查找:isPaired
的WCSession
属性
调用activateSession
并获得回调后,您可以检查手表是否在那里配对
如果您需要知道应用程序是否安装在手表上-请检查您要查找的isWatchAppInstalled
:isPaired
属性WCSession
调用activateSession
并获得回调后,您可以检查手表是否在那里配对
如果您需要知道应用程序是否安装在手表上-检查isWatchAppInstalled
谢谢,iPaired会告诉我手机是否与手表配对,但我想知道手表是否存在并处于活动状态。请参阅“有问题的编辑”以澄清。@davidgeyoung isPaired正是如此。不幸的是,我的测试显示,无论手机是否实际存在或通电,isPaired都返回true。谢谢,isPaired确实会告诉我手机是否与手表配对,但我想知道该手表是否存在并处于活动状态。请参阅“有问题的编辑”以澄清。@davidgeyoung isPaired正是这样不幸的是,我的测试显示,isPaired返回true,无论手机是否实际存在或通电。谢谢。所以isPaired会告诉我手表是否配对,但不会告诉我手表是否存在并连接到手机。我尝试了isReachable,但它总是返回false,即使手表已连接,可能是因为我没有WatchKit扩展。我只是想看看有没有手表。我编辑了我的问题以澄清。对不起,我试图理解。。。显示的与“显示并连接到手机”之间有什么区别?根据我的测试,看看这些问题,iPaired标志只是表示用户在过去某个时间曾将手机与手表配对。它不会告诉你手表是否在手机附近通电——即使手机关机或超出无线电范围,isPaired也会返回true。我正在寻找手机是否与手表有效连接的指示器。(iOS watch应用程序的UI中有此指示器)谢谢。所以isPaired会告诉我手表是否配对,但不会告诉我手表是否存在并连接到手机。我尝试了isReachable,但它总是返回false,即使手表已连接,可能是因为我没有WatchKit扩展。我只是想看看有没有手表。我编辑了我的问题以澄清。对不起,我试图理解。。。显示的与“显示并连接到手机”之间有什么区别?根据我的测试,看看这些问题,iPaired标志只是表示用户在过去某个时间曾将手机与手表配对。它不会告诉你手表是否在手机附近通电——即使手机关机或超出无线电范围,isPaired也会返回true。我正在寻找手机是否与手表有效连接的指示器。(iOS watch应用程序的UI中有此指示器)