ios - 从ios发送消息到watchos的问题
问题描述
我正在尝试从我的 iOS 应用程序向其配套的 Watch App 发送消息。如果手表屏幕打开,那么一切正常,我可以看到消息。如果屏幕变黑,则手表“无法访问”并且我的消息不会被打印。
iOS 代码
// Invoking this function from viewDidLoad() of the view controller
func checkWatchConnectivityIsSupported() {
if (WCSession.isSupported()) {
print ("WC Session is supported")
let session = WCSession.default
session.delegate = self
session.activate()
}
}
// sending messages on click of a button
func sendMessageToWatch(type: String, message: String) {
print ("Sending message to watch \(type) \(message)")
// send a message to the watch if it's reachable
if (WCSession.default.isReachable) {
print ("isReachable")
// this is a meaningless message, but it's enough for our purposes
let message = [type: message]
// WCSession.default.sendMessage(message, replyHandler: nil)
WCSession.default.sendMessage(message, replyHandler: nil, errorHandler: { (err) in
print ("There was an error in sending message \(err)")
debugPrint(err)
})
} else {
// This happens when the watch screen display goes off.
print ("watch is not reachable")
}
}
WatchOS 代码 - InterfaceController.swift
// invoking this function from willActivate()
func checkIfWatchIsConnected() {
if WCSession.isSupported() {
let session = WCSession.default
session.delegate = self
session.activate()
}
}
// implementation of delegate methods
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
}
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
print ("Message received in watch \(message)")
WKInterfaceDevice().play(.click)
let isStatusType = message["Status"] != nil
if (isStatusType) {
let text = message["Status"] as! String
statusLabel.setText(text)
return
}
}
解决方案
这是预期的行为。
WatchKit 扩展。iOS 设备在范围内,因此可以进行通信并且 WatchKit 扩展程序在前台运行,或者在后台以高优先级运行(例如,在锻炼期间或当一个复杂功能正在加载其初始时间线数据时) .
您在需要实时消息传递时使用isReachable
和。sendMessage
为活动的配套 iOS 应用程序提供“远程控制”的手表应用程序或与手表上的活动锻炼应用程序通信的 iOS 应用程序就是示例。
为了让实时消息传递工作,手表确实需要保持清醒。
当手表未激活时,您可以使用updateApplicationContext
和方法将数据传输到您的配套应用程序。transferUserInfo
为了延长电池寿命,这些传输被排队和机会性地传输。
推荐阅读
- angular - Identity Server 4 在帐户/登录时向 Angular 客户端响应 403(禁止)
- flutter - video_player 依赖项不起作用 api 19
- mongodb-.net-driver - 如何使用 C# mongodb 驱动程序防止 SQL 注入?
- ios - Swift 防止“0”成为 1 个特定 uiTextField 的第一个字符
- javascript - 为什么在使用 post 请求获取时我无法重定向到我的 get 路由器?
- google-maps - 谷歌地方 api 实施期间的警告(颤振)
- java - 如何在 iText 7 中为泰国双标设置字母上方的 GPOS
- quantum-computing - 如何训练输出状态向量的 TensorFlow Quantum 模型?
- python - 如何根据类型自动拆分 Python 列表?
- powershell - 方法调用失败,因为 [System.Object[]] 不包含名为“op_Division”的方法