如何在 swift [iOS] 中从特定时间开始发送本地通知 UNTimeInterval

Posted

技术标签:

【中文标题】如何在 swift [iOS] 中从特定时间开始发送本地通知 UNTimeInterval【英文标题】:How to send local notification UNTimeInterval starting at specific time in swift [iOS] 【发布时间】:2019-07-16 15:15:18 【问题描述】:

我想从特定时间开始每 8 小时发送一次本地通知。 例如,现在我们是上午 10 点,但我希望你从 12 点开始每 8 小时通知我一次,我该怎么做。

我有这个代码:

let content: UNMutableNotificationContent = UNMutableNotificationContent()
content.title = "Alert!"
content.body = "Alert"
content.categoryIdentifier = "alarm"

let request = UNNotificationRequest(
    identifier: "AA",
    content: content,
    trigger: UNTimeIntervalNotificationTrigger(timeInterval: 8*3600, repeats: false)
)

let action = UNNotificationAction(identifier: "remindLater", title: "remind_me_later".localized(), options: [])
let category = UNNotificationCategory(identifier:"pill-alarm", actions: [action], intentIdentifiers: [], options: [])

UNUserNotificationCenter.current().setNotificationCategories([category])
UNUserNotificationCenter.current().add(request)

【问题讨论】:

【参考方案1】:

所以我遇到了同样的问题,我最终做的是:

假设您每 8 小时有一次闹钟,从 12 点开始,现在是上午 10 点 好吧,我做了一些计算并创建了几个重复的通知:

第一次通知将在每天 12 点发送, 第二次通知将在每天 20 点进行, 第三次通知将在每天 4 点进行。

你可以这样创建它们:

var date = DateComponents()
date.hour = hour
date.minute = minutes

let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)

let request = UNNotificationRequest(identifier: notificationId, content: content, trigger: trigger)

center.add(request)  (error) in
    if let error = error 
        print("Error \(error.localizedDescription)")
    

您需要为它们设置不同的标识符,以便您可以对它们进行第一、第二、第三或计数。如果您需要在某些时候取消它们,这将对您有所帮助。

【讨论】:

【参考方案2】:

首先你需要创建一个触发日期而不是时间间隔

像这样:

let date = Date(timeIntervalSinceNow:  8*3600 + extraTime) // extraTime = time interval between 8 to 12
let triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: date)

现在在请求中使用触发日期

let request = UNNotificationRequest(
    identifier: "AA",
    content: content,
    trigger: UNTimeIntervalNotificationTrigger(timeInterval: triggerDate, repeats: false)
)

更多参考:https://useyourloaf.com/blog/local-notifications-with-ios-10/

【讨论】:

这不编译也没有任何意义。

以上是关于如何在 swift [iOS] 中从特定时间开始发送本地通知 UNTimeInterval的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift ios中从移动网络获取纬度和经度[关闭]

如何在swift中从文档目录中获取特定文件的NSURL

IOS - 如何在 Swift 3 中从 JSON 中捕获动态数组维度

如何在 Swift / iOS 中从 UITableView 中删除行并从 UserDefaults 中更新数组

如何在pygame中从特定时间开始播放音频文件

如何在iOS Swift 3中从键盘中删除更改语言键按钮