最近有一个需求,需要做一个闹钟提示的功能,也就是点击按钮,设置一段时间后可以铃声提示用户时间到了。
1.刚开始是用的倒计时,也就是在按钮那个界面,得到Appdelegate的设置的代理方法,来进行倒计时,时间为0后,进行背景音乐的播放,当时这种方法已经写好了。但是需求需要的时间过长,几个小时,我们都知道苹果会在后台停留10分钟,以后就会被kill,所以这个方法行不通。只能用其他的方法。
2.用本地推送来做,代码如下:
//设置本地推送
UILocalNotification *notification = [[UILocalNotification alloc] init];
// 设置触发通知的时间. //alertTime间隔时间
NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:alertTime];
NSLog(@"fireDate=%@",fireDate);
notification.fireDate = fireDate;
// 时区
notification.timeZone = [NSTimeZone defaultTimeZone];
// 设置重复的间隔
notification.repeatInterval = kCFCalendarUnitSecond;
// 通知内容
notification.alertBody = @"⏰大茶埠喊您蹭茶啦";
notification.applicationIconBadgeNumber = 1;
// 通知被触发时播放的声音
notification.soundName = @"三星优美闹钟铃声.caf";
// 通知参数
NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"大茶埠喊您蹭茶啦" forKey:@"key"];
notification.userInfo = userDict;
// ios8后,需要添加这个注册,才能得到授权
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type
categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
// 通知重复提示的单位,可以是天、周、月
notification.repeatInterval = 0;
} else {
// 通知重复提示的单位,可以是天、周、月
notification.repeatInterval = 0;
}
// 执行通知注册
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
//设置取消本地推送
// 获取所有本地通知数组
NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;
for (UILocalNotification *notification in localNotifications) {
NSDictionary *userInfo = notification.userInfo;
if (userInfo) {
// 根据设置通知参数时指定的key来获取通知参数,这个key要和你设置的保持一致
NSString *info = userInfo[key];
// 如果找到需要取消的通知,则取消
if (info != nil) {
[[UIApplication sharedApplication] cancelLocalNotification:notification];
break;
}
}
}