Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检查Apple Watch当前是否未连接_Ios_Watchkit_Apple Watch - Fatal编程技术网

Ios 检查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

我正在尝试使用以下代码检测用户的Apple watch当前是否处于活动状态:

if WCSession.isSupported()  {
  let session = WCSession.default
  session.delegate = self
  session.activate() 
}
但即使在我关闭手表电源后,我也会收到一个对
会话的回调(\uSession:WCSession,ActivationIDComplete with activationState:WCSessionActivationState,error:error?)
with
activationState==.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中有此指示器)