当最前面的应用程序收到通知时播放触觉

时间:2017-10-25 17:28:06

标签: swift notifications watchkit watch-os watch-os-4

在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 个答案:

答案 0 :(得分:0)

检查applicationState。如果状态为play(:)background,则inactive方法无效。

  

当您的共享WKExtension对象的applicationState属性为background或inactive时,此方法无效。默认情况下,您无法在后台播放触觉反馈。唯一的例外是具有主动锻炼课程的应用程序。有关更多信息,请参阅在HKWorkoutSession中的后台运行。

https://developer.apple.com/documentation/watchkit/wkinterfacedevice/1628128-play