WatchKit InterfaceController 在 sendMessage:replyHandler 中有条件地播放触觉:
WatchKit InterfaceController conditionally play haptic in sendMessage:replyHandler:
我想让界面控制器检查以确保当我收到 phone 的回复时它仍然在前台。如果是,执行触觉以让用户知道它已完成工作。
sendMessage:replyHandler:
是我用来与 phone 通信的方式,但它可能需要很长时间才能与 return 通信。 InterfaceController
设置为 WCSessionDelegate
。它可能需要足够长的时间,以至于用户可以在完成之前放下他们的手腕。在那种情况下,我想让触觉不触发。截至目前,触觉可以排队,然后在未来的随机时间播放,这没有帮助。
我已配置要发送的通知,但只有在手表未显示该应用程序时才会显示。因此,为什么我需要在尝试播放触觉之前弄清楚界面控制器是否在屏幕上。
我首先考虑改进 iOS 代码,这样 return 回复的时间不会太长。
但是,您可以在回复消息中包含当前日期,然后让回复处理程序在播放触觉之前检查回复是否是即时的。如果在您的应用下次激活时处理了回复,这将避免它在未来播放。
顺便说一句,界面控制器会出现在屏幕上,因为它正在执行回复处理程序。
我建议的步骤。
sendMessage:replyHandler:
从 Watch 发送任务请求,这将要求 phone 执行一些较长的 运行 任务。
- 观看此调用时生成一些 BOOL,比方说
shouldUpdatePhone = YES
- 现在考虑您的任务是 运行 并且 Watch 处于 InActive 状态,在这种情况下,您的 Flag (
shouldUpdatePhone
) 是 YES 所以再次立即调用并告诉 iPhone 该屏幕现在处于活动状态。
- 如果长时间 运行 任务在那之后完成,您将获得 Watch 现在处于非活动状态的信息,然后避免 Haptic 的响应信号。
我想让界面控制器检查以确保当我收到 phone 的回复时它仍然在前台。如果是,执行触觉以让用户知道它已完成工作。
sendMessage:replyHandler:
是我用来与 phone 通信的方式,但它可能需要很长时间才能与 return 通信。 InterfaceController
设置为 WCSessionDelegate
。它可能需要足够长的时间,以至于用户可以在完成之前放下他们的手腕。在那种情况下,我想让触觉不触发。截至目前,触觉可以排队,然后在未来的随机时间播放,这没有帮助。
我已配置要发送的通知,但只有在手表未显示该应用程序时才会显示。因此,为什么我需要在尝试播放触觉之前弄清楚界面控制器是否在屏幕上。
我首先考虑改进 iOS 代码,这样 return 回复的时间不会太长。
但是,您可以在回复消息中包含当前日期,然后让回复处理程序在播放触觉之前检查回复是否是即时的。如果在您的应用下次激活时处理了回复,这将避免它在未来播放。
顺便说一句,界面控制器会出现在屏幕上,因为它正在执行回复处理程序。
我建议的步骤。
sendMessage:replyHandler:
从 Watch 发送任务请求,这将要求 phone 执行一些较长的 运行 任务。- 观看此调用时生成一些 BOOL,比方说
shouldUpdatePhone = YES
- 现在考虑您的任务是 运行 并且 Watch 处于 InActive 状态,在这种情况下,您的 Flag (
shouldUpdatePhone
) 是 YES 所以再次立即调用并告诉 iPhone 该屏幕现在处于活动状态。 - 如果长时间 运行 任务在那之后完成,您将获得 Watch 现在处于非活动状态的信息,然后避免 Haptic 的响应信号。