手表应用即使在后台也能接收后台信息吗?
Posted
技术标签:
【中文标题】手表应用即使在后台也能接收后台信息吗?【英文标题】:Can the watch app receive background info even if the app is in the background? 【发布时间】:2018-04-09 08:15:08 【问题描述】:我无法弄清楚如何让updateApplicationContext
数据在手表应用程序处于前台之前到达手表。它似乎只有在手表应用程序处于前台时才有效。
手表如何在后台接收文件?
这就是我一直在努力实现的目标:
ios 代码:
func sendDataToWatch()
if WCSession.isSupported()
do
try WCSession.default.updateApplicationContext(["key":value])
catch
print("ERROR: \(error)")
观看代码:
func session(_ session: WCSession, didReceiveApplicationContext
applicationContext:[String : Any])
//handle data when it arrives
我注意到 WatchConnectivity 提供了一个处理函数。这是我应该设置的东西,以便能够在 Watch 应用程序处于后台或什至未启动时处理后台连接吗?
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>)
// Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one.
for task in backgroundTasks
// Use a switch statement to check the task type
switch task
case let backgroundTask as WKApplicationRefreshBackgroundTask:
// Be sure to complete the background task once you’re done.
backgroundTask.setTaskCompletedWithSnapshot(false)
default:
// make sure to complete unhandled task types
task.setTaskCompletedWithSnapshot(false)
【问题讨论】:
你试过什么?请发布一个示例。 我已经用我的例子编辑了这个问题 【参考方案1】:根据苹果的说法,您可以在会话可达时使用 SendMessage 将数据从 iPhone 发送到 Apple Watch。
https://developer.apple.com/documentation/watchconnectivity/wcsession/1615687-sendmessage
在 WatchKit 扩展程序处于活动状态时调用此方法 并运行在后台唤醒相应的 iOS 应用程序和 使其可达。
您可以使用以下方法将数据从 iPhone 发送到 Apple Watch
斯威夫特 2.2
let msg = ["IPrequest":"IsLogin"]
WCSession.defaultSession().sendMessage(msg, replyHandler: (replyDict) in
print(replyDict)
, errorHandler: (error) in
print(error)
)
使用以下方法接收字典
斯威夫特 2.2
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void)
dispatch_async(dispatch_get_main_queue()) () -> Void in
print("Response:\(message)")
我已经在我的一个项目中实施了上述解决方案。
希望对你有帮助!
【讨论】:
我想反其道而行之。从 iOS 到 Watch 应用。从同一文档页面:“从您的 iOS 应用程序调用此方法不会唤醒相应的 WatchKit 扩展。” 我正在尝试想出一款可以很好地完成您所描述的应用程序。许多人在打开之前不会同步。 我要做的是在 iOS 应用程序运行时将数据发送到手表。当从 iOS 安排的本地通知触发时,我想显示之前已经发送到手表的数据。如果我在通知开始处理时尝试发送数据,那将花费太长时间。我想在通知中显示一个图像,但它会在 iOS 应用程序运行时由 iOS 应用程序通过 MKMapSnapshotter 生成。以上是关于手表应用即使在后台也能接收后台信息吗?的主要内容,如果未能解决你的问题,请参考以下文章