关于iOS本地调用系统时钟通知

第一步发起通知.主要是date日期获取.可以在UIDatePicker或者calendar获取时间

mDatePicker.datePickerMode = .time
        let date = mDatePicker.date

        // 创建一个日期格式器
        let dformatter = DateFormatter()
        // 为日期格式器设置格式字符串
        dformatter.dateFormat = "HH:mma"
        // 使用日期格式器格式化日期、时间
        let datestr = dformatter.string(from: date)
        let message =  "每天 \(datestr)"
        NSLog(message)
        
        // 设置日期
        mTimeNotifyBtn.titleLabel?.text = message

        let types = UIUserNotificationType.alert
        let mySettings = UIUserNotificationSettings.init(types: types, categories: nil)
        UIApplication.shared.registerUserNotificationSettings(mySettings)
        let notification = UILocalNotification.init()
        notification.fireDate = NSDate.init(timeInterval: 10.0, since: date) as Date

        notification.alertBody = "您设置的练习时间到了"
        notification.alertTitle="请打开EnglishLeanger";
        notification.alertAction = "不要忘记学英语哦!";
        notification.repeatInterval=NSCalendar.Unit.day
        notification.applicationIconBadgeNumber=1;
        notification.soundName=UILocalNotificationDefaultSoundName;
        UIApplication.shared.scheduleLocalNotification(notification)

遇到的坑:
没有加入以下三行代码.提醒不出现
let types = UIUserNotificationType.alert
let mySettings = UIUserNotificationSettings.init(types: types, categories: nil)
UIApplication.shared.registerUserNotificationSettings(mySettings)

第二步,appdelegate里面设置

// 申请闹钟权限
    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
    }
    else {
        [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge];
    }
    //获取本地通知
    UILocalNotification * localNotify = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

    if(localNotify){
        [self application:self didReceiveLocalNotification:localNotify];
    }else {

    }

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;

ps :遇到的bug 没有动态获取权限,也不会显示通知,而且不报错
注意小红点的展示applicationIconBadgeNumber
需要点击后取消通知,不然会一直重复不断通知代码如下:

-(void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
    [[UIApplication sharedApplication] cancelLocalNotification:notification];
}

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

相关阅读更多精彩内容

  • 许多集成的步骤个推官网都有了,这里只写关于推送的远程推送和本地通知的步骤和代码。APP在后台时:走苹果的APNS通...
    AllureJM阅读 7,853评论 1 9
  • 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知...
    莫离_焱阅读 11,610评论 1 8
  • 推送通知 注意:这里说的推送通知跟NSNotification有所区别 NSNotification是抽象的,不可...
    iOS开发攻城狮阅读 9,785评论 1 13
  • 《天龙八部》里,阿朱并非主角,刚出场时的身份不过是燕子坞的一个婢女。但是她古灵精怪,机灵俏皮,在模仿人物方面是一等...
    金芽儿阅读 6,091评论 8 46
  • 如歌和尚云一同走进了那个门口挂有103班牌子的教室。 教室里一片欢腾,大家笑着,闹着,素不相识的他和她们,从小城的...
    咖啡里的雲阅读 1,711评论 0 0

友情链接更多精彩内容