在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])
通知会在手腕抬起或降低时提醒用户。这是我想要的行为,但仅限于触觉。
我该如何实现?
答案 0 :(得分:0)
检查applicationState
。如果状态为play(:)
或background
,则inactive
方法无效。
当您的共享WKExtension对象的applicationState属性为background或inactive时,此方法无效。默认情况下,您无法在后台播放触觉反馈。唯一的例外是具有主动锻炼课程的应用程序。有关更多信息,请参阅在HKWorkoutSession中的后台运行。
https://developer.apple.com/documentation/watchkit/wkinterfacedevice/1628128-play