当最前面的应用收到通知时播放触觉
Posted
技术标签:
【中文标题】当最前面的应用收到通知时播放触觉【英文标题】:Playing a haptic when frontmost app receives a notification 【发布时间】:2017-10-25 17:28:06 【问题描述】:在 Apple 的 Frontmost App Behavior 文档中,声明
“[...]当最前面的应用收到通知时,它可以播放触觉反馈或自定义声音,而不是显示通知警报,然后更新其用户界面。”
但是,我在执行此操作时遇到了麻烦。现在,按下按钮后,我在安排通知之前将应用声明为最前面:
@IBAction func StartButtonPressed()
WKExtension.shared().isFrontmostTimeoutExtended = true
scheduleNotification()
当应用处于前台时收到通知时,它会播放触觉:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
//MARK: Handle foreground notification here
WKInterfaceDevice.current().play(.success)
print("Foreground notification received")
return
这在用户的手腕抬起时有效,但在用户点击按钮后放下手腕时无效。 当手腕抬起或放下时,控制台都会打印收到前台通知。
如果不是播放触觉,我设置completionHandler([.alert,.sound])
通知会在手腕抬起或放下时提醒用户。这是我想要的行为,但仅限于触觉。
我该如何实现?
【问题讨论】:
【参考方案1】:检查applicationState
。如果状态为background
或inactive
,play(:)
方法将不起作用。
当您的共享 WKExtension 对象的 applicationState 属性为背景或非活动状态时调用此方法无效。默认情况下,您无法在后台播放触觉反馈。唯一的例外是具有活跃锻炼会话的应用程序。有关更多信息,请参阅 HKWorkoutSession 中的后台运行。
https://developer.apple.com/documentation/watchkit/wkinterfacedevice/1628128-play
【讨论】:
在 watchOS 4 最前端的应用程序获得了从后台唤醒以接收通知的优势。如果应用从后台唤醒,为什么通知不播放触觉? @Patrick 这就是苹果文档所说的。你确定运行WKInterfaceDevice.current().play(.success)
时状态是前台吗?
似乎应该可以。似乎不需要设置这个但值得一试。 LINK
我检查了应用程序是否处于最前端状态,因为根据文档,watchOS 4 中最前端的应用程序特别能够从后台播放触觉反馈。在 watchOS 4 之前,已经可以通过锻炼会话来播放触觉,但现在不应该没有它就可以工作吗?如果applicationState. play(:)
不起作用,那么正确的方法是什么?以上是关于当最前面的应用收到通知时播放触觉的主要内容,如果未能解决你的问题,请参考以下文章