IOS 处理本地推送,设置一个闹钟功能

最近有一个需求,需要做一个闹钟提示的功能,也就是点击按钮,设置一段时间后可以铃声提示用户时间到了。

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;
            }
        }
    }

你可能感兴趣的:(IOS 处理本地推送,设置一个闹钟功能)