如何设置本地通知以每 48 小时通知用户一次?

Posted

技术标签:

【中文标题】如何设置本地通知以每 48 小时通知用户一次?【英文标题】:How can I set a local notification to notify user after every 48 hours? 【发布时间】:2014-01-25 07:22:18 【问题描述】:

ios 中,我想安排一个通知,在用户关闭应用程序后 48 小时后通知他。除了 48 小时,它还必须在晚上 7 点显示。当天。

例如: 当前时间是下午 5 点,用户关闭应用。然后通知应该在 2 天后下午 5 点弹出,但我希望它延迟到晚上 7 点。为了达到上述标准,我应该如何编写代码?

【问题讨论】:

你知道要延迟多少小时吗?如果是,那么您可以在安排通知时添加该时间延迟。 【参考方案1】:

- (void)applicationWillResignActive:(UIApplication *)application方法中,

    计算要显示的实际时间,即 48 小时 + 小时到当天晚上 7 点。 取消任何当前预定的通知 创建一个UILocalNotification 并设置所需的参数(触发时间和警报文本)。

根据评论编辑:

如果我理解你,这应该是你想要的。它会计算 48 小时后的时间,并手动将点火时间设置为晚上 7 点。如果计算的时间大于晚上 7 点,则会在第二天被解雇。


NSDate *currentDate = [NSDate date];
NSDate *futureTime = [currentDate dateByAddingTimeInterval:60*60*48];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
[calendar setTimeZone:timeZone];

NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit fromDate:futureTime];
if ([components hour] >= 19)  // make it the next day 
    [components setDay:[components day] + 1 ];

[components setHour:19];
[components setMinute:00];
NSDate *alertTime = [calendar dateFromComponents:components];

【讨论】:

第一点是我卡住的地方。我知道如何获得 48 小时,但直到晚上 7 点我才知道时差有多大【参考方案2】:
   NSDateFormatter *DateFormatter=[[NSDateFormatter alloc] init];
    [DateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *date =[NSDate dateWithTimeInterval:60*60*48 sinceDate:[NSDate date]];
    NSString *dateString=[DateFormatter stringFromDate:date];

    NSInteger timeLater=[dateString substringWithRange:NSMakeRange(11, 2)].integerValue;
    if(timeLater<19)
        date =[date dateByAddingTimeInterval:(19-timeLater)*60*60];
    dateString=[DateFormatter stringFromDate:date];
    NSLog(@"%@",dateString);


notification.fireDate =date.

【讨论】:

我想知道如何计算“差异”?

以上是关于如何设置本地通知以每 48 小时通知用户一次?的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地通知重复间隔设置为自定义时间间隔?

如何将本地通知重复间隔设置为自定义时间间隔?

本地通知 - 重复间隔/自定义时间不起作用

如何将事件侦听器添加到本地反应原生通知

如何设置在第一次设置通知后每秒钟触发一次的本地通知?

停止本地通知