gpt4 book ai didi

ios - Apple Watch 背景模式?

转载 作者:搜寻专家 更新时间:2023-10-31 22:33:13 26 4
gpt4 key购买 nike

我正在开发 Apple Watch 应用程序。当我运行该应用程序时,它工作正常。现在我的问题是当应用程序进入后台模式时,Apple Watch 应用程序上的应用程序将自动关闭。我正在 iPhone 应用程序中编写小代码:

func viewDidLoad() {

if (WCSession.isSupported()) {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()

// In your WatchKit extension, the value of this property is true when the paired iPhone is reachable via Bluetooth.
// On iOS, the value is true when the paired Apple Watch is reachable via Bluetooth and the associated Watch app is running in the foreground.
// In all other cases, the value is false.
if session.reachable {
lblStatus.text = "Reachable"

}
else
{
lblStatus.text = "Not Reachable"


}
func sessionReachabilityDidChange(session: WCSession)
{
if session.reachable {
dispatch_async(dispatch_get_main_queue(), {
self.lblStatus.text = "Reachable"
})

}
else
{
dispatch_async(dispatch_get_main_queue(), {
self.lblStatus.text = "Not Reachable"
})
}
}
}
}

在WatchExtention代码是

func someFunc() {
if (WCSession.isSupported()) {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()



if session.reachable {
ispatch_async(dispatch_get_main_queue(), {
self.lblStatus.setText("Reachable")
})

}
else
{
dispatch_async(dispatch_get_main_queue(), {
self.lblStatus.setText("Not Reachable")
})
}
func sessionReachabilityDidChange(session: WCSession)
{

if session.reachable {
dispatch_async(dispatch_get_main_queue(), {
self.lblStatus.setText("Reachable")
})

}
else
{
dispatch_async(dispatch_get_main_queue(), {
self.lblStatus.setText("Not Reachable")
})
}
}
}
}

现在当进入 apple Watch 后台时,iPhone 应用程序显示 Not reachable 为什么?

最佳答案

这是 AppleWatch 的默认行为,主要是为了节省电池等资源。

session.reachable property is true only when Apple Watch is reachable via Bluetooth and the associated Watch app is running in the foreground in all other cases, the value is false.

在你的情况下,导致问题的第二个选项我认为蓝牙连接正在工作。

不管怎样,问题是你想达到什么目的。

实际上,简单的规则是您无法从 iPhone 唤醒 Watch,但可以从 Watch 唤醒 iPhone 应用程序。

当 watch 的对应物在后台时,通过三种方式联系 watch 的两种方式:发送复杂功能更新或在后台发送一条消息(2 个选项),当 watch 再次唤醒时,该消息可供 watch 使用。所有这些都是 WCSession Class 的一部分.

发送消息的两个选项是:

- updateApplicationContext:error:

您可以使用此方法将数据字典传输到对应的 Watch 应用程序。iPhone 会在机会出现时发送上下文数据,也就是 Watch 应用程序出现时。对应的 Watch session 通过 session:didReceiveUpdate 获取数据: 方法或来自 receivedApplicationContext 属性。

您可以在当前无法访问 watch 时调用此方法。

另一种选择是像在后台发送数据

- transferUserInfo:

当您想要向 Watch 发送数据字典并确保它已送达时,您可以使用此方法。使用此方法发送的词典在另一台设备上排队,并按发送顺序传送。传输开始后,即使应用暂停,传输操作也会继续。

但这两种方法都是正确的,它们只能在 session 处于事件状态时调用。为非事件或停用 session 调用任何这些方法都是程序员错误。

并发症的解决方案有点不同,但与早期的解决方案属于同一个 WCSession 类。

-transferCurrentComplicationUserInfo:

此方法专门用于将复杂功能用户信息传输到 watch ,以便立即显示在表盘上。当然,它仅适用于 iOS,使用此方法会占用您的复杂时间预算,因此可用性有限。

复杂的用户信息放在队列的最前面,所以 watch 会在后台唤醒扩展接收信息,然后立即进行传输。

您的 watch 应用程序收到的所有消息都在后台线程上连续传递给 session 委托(delegate),因此您必须切换到主队列,以防您想要为 UI 使用或呈现它们。

关于ios - Apple Watch 背景模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35222357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com