【发布时间】:2016-05-12 13:44:08
【问题描述】:
我正在为 Apple Watch 开发计时器应用程序。
在特定时间(定时器结束),iPhone 会触发一个预定的UILocalNotification,在不活动的 Apple Watch 上应该会触发一个触觉警报,告诉用户定时器已经结束。
我这样做是因为一旦手表处于非活动状态,计时器就不会继续在 Apple Watch 上运行。
我面临的问题是:
a) 通知有时会显示在 iPhone 上而不是 Apple Watch 上(根据其他帖子,我担心这无法更改...)
b) 手表上不提供触觉警报(仅显示通知,仅在用户下次激活手表时显示,而不是在实际触发通知时)
func sendAwakeNotification(nextTime:NSDate) {
print("AppDelegate: - sendAwakeNotification")
dispatch_async(dispatch_get_main_queue()) { () -> Void in
let localNotification = UILocalNotification()
localNotification.fireDate = nextTime
localNotification.timeZone = NSTimeZone.defaultTimeZone()
localNotification.alertBody = "Finished Step"
localNotification.alertTitle = "Alert"
localNotification.soundName = UILocalNotificationDefaultSoundName
localNotification.category = "myTimer"
let userInfo: [NSObject : AnyObject] = [
"notification_id" : "myTimerNotification"
]
localNotification.userInfo = userInfo
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
}
}
通知中的代码
override func didReceiveLocalNotification(localNotification: UILocalNotification, withCompletion completionHandler: ((WKUserNotificationInterfaceType) -> Void)) {
print("received notification")
dispatch_async(dispatch_get_main_queue()) { () -> Void in
let notificationCenter = NSNotificationCenter.defaultCenter()
notificationCenter.postNotificationName(NotificationAlertFromPhone, object: nil)
}
completionHandler(.Custom)
}
我尝试直接在 NotificationController (WKInterfaceDevice.currentDevice().playHaptic(WKHapticType.Notification)) 中触发触觉警报,但没有成功。因此,我恢复发送应该由 ExtensionDelegate 接收以触发触觉的通知。
这是 ExtensionDelegate 中的代码:
private func setupNotificationCenter() {
print("ExtensionDelegate: - setupNotificationCenter")
notificationCenter.addObserverForName(NotificationAlertFromPhone, object: nil, queue: nil) { (notification:NSNotification) -> Void in
WKInterfaceDevice.currentDevice().playHaptic(WKHapticType.Notification)
}
}
【问题讨论】:
标签: swift watchkit uilocalnotification apple-watch watchos-2