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;
            }
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,359评论 25 709
  • 执笔写字句于世界中找寻欲罢不能的金钱或已体无完肤的梦想给予我新生力量 总是热血满腔遇见坎坷才不觉悲凉有时你满身创伤...
    文萝卜阅读 1,846评论 6 7
  • 养了一只猫 成天与它逗乐玩闹 听说猫有九条命 你把它埋在冰箱里 你让它躲进火炉里 你将它从高楼扔下去 …… 猫说请...
    dola哆啦阅读 2,224评论 2 1
  • 舌头底下又起一个水泡,他伸出舌头,用手把水泡捏破,很显然又上火了,他心情不太好,半夜一点多也不睡觉,躺在这个伸个懒...
    噗嗤D阅读 1,828评论 0 0

友情链接更多精彩内容