美文网首页
IOS 处理本地推送,设置一个闹钟功能

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

作者: 何康老鬼 | 来源:发表于2018-02-08 18:23 被阅读567次

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

    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 处理本地推送,设置一个闹钟功能

          本文链接:https://www.haomeiwen.com/subject/taottftx.html