这段时间项目要求做一个类似的闹钟提醒功能,对通知不太熟悉的我,决定先用到xcode自带的本地通知试试,最终成功的实现了功能,特整理分享下。

它的表现特点:

app关闭的时候也能接收和显示通知。

app处于后台的时候能接收通知也能显示。

app处于前台的时候能接收,但不能显示,但是会走应用程序delegate中的方法

具体的创建方法:

-》创建一个本地通知对象UILocalNotification

-》设置fireDate,AlertBody,AlertAction,soundName,applicationBadgeNumber,repeatInterval,alertLanuchImage属性

-》配置通知参数,userInfo。及通知的内容。我们可以在接收通知的方法中获取该对象。

-》调用通知,使用UIApplication的单例对象scheduleLocalNotificaiton按照计划启动通知

此处需要注意的是自从iOS8之后需要征求用户的通知,如果同意则创建UIUerNotificationSettings,然后 registerUserNotificationSettings。网上有说法:对本地通知的数量限制,iOS最多允许最近本地通知数量是64个,超过限制的本地通知将被iOS忽略。经过测试,本地通知根本没有限制,可能以前有限制吧,现在已经不限制数量了。

下面就是详细的代码:

 1.注册通知 ,同样也适用于iOS10

  在appdelegate的application:didFinishLaunchingWithOptions:中调用下面的方法

   

另外补充:为了适配iOS10,上面的代码最好是换成下面的

  

  2.本地通知的定义和使用

  在需要使用本地通知的控制器定义,这里为了简便直接定义一个5s之后的闹钟,可以改成任意一个时间点的,转换成NSDate类型替换[NSDate dateWithTimeIntervalSinceNow:5]即可。

  

  为了区分不同的本地通知,可以在定义的同时定义下面的属性

  //设置通知的相关信息,这个很重要,可以添加一些标记性内容,方便以后区分和获取通知的信息
     NSDictionary *infoDic = [NSDictionary dictionaryWithObjectsAndKeys:LOCAL_NOTIFY_SCHEDULE_ID,@"id", nil];
    localNotification.userInfo = infoDic;

3.取消本地通知

  注意::在每次不需要或者重新刷新所有的本地通知之前必须先取消所有的本地通知,不然会有重复的相同的通知。

  //取消某一个通知
     NSArray *notificaitons = [[UIApplication sharedApplication] scheduledLocalNotifications];
     //获取当前所有的本地通知
     if (!notificaitons || notificaitons.count <= 0) {
         return;
     }
     for (UILocalNotification *notify in notificaitons) {
        if ([[notify.userInfo objectForKey:@"id"] isEqualToString:LOCAL_NOTIFY_SCHEDULE_ID]) {
            //取消一个特定的通知
            [[UIApplication sharedApplication] cancelLocalNotification:notify];
            break;
        }
    }
    
    //取消所有的本地通知
    [[UIApplication sharedApplication] cancelAllLocalNotifications];

4.本地通知的响应

  如果已经注册了本地通知,当客户端响应通知时:

a、应用程序在后台的时候,本地通知会给设备送达一个和远程通知一样的提醒

b、应用程序正在运行中,则设备不会收到提醒,但是会走应用程序delegate中的方法:

  - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {  
  }

  如果你想实现程序在后台时候的那种提醒效果,可以在上面这个方法中添加相关代码

  if ([[notification.userInfo objectForKey:@"id"] isEqualToString:LOCAL_NOTIFY_SCHEDULE_ID]) {  
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"test" message:notification.alertBody delegate:nil cancelButtonTitle:@"关闭" otherButtonTitles:notification.alertAction, nil nil];  
       [alert show];  
   }

  需要注意的是,在情况a中,如果用户点击提醒进入应用程序,也会执行收到本地通知的回调方法,这种情况下如果你添加了上面那段代码,则会出现连续出现两次提示,为了解决这个问题,修改代码如下:

  if ([[notification.userInfo objectForKey:@"id"] isEqualToString:LOCAL_NOTIFY_SCHEDULE_ID]) {  
         //判断应用程序当前的运行状态,如果是激活状态,则进行提醒,否则不提醒  
         if (application.applicationState == UIApplicationStateActive) {  
             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:notification.alertBody delegate:nil cancelButtonTitle:@"关闭" otherButtonTitles:nil, nil];  
            [alert show];  
         }  
     }

  如果适配了iOS10,则还应该加上下面的

  

  

iOS开发中UILocalNotification本地通知实现简单的提醒功能的更多相关文章

  1. Ios开发中UILocalNotification实现本地通知实现提醒功能

    这两天在做一个日程提醒功能,用到了本地通知的功能,记录相关知识如下: 1.本地通知的定义和使用: 本地通知是UILocalNotification的实例,主要有三类属性: scheduled time ...

  2. iOS开发中打开本地应用、打开appStore应用、给app评分功能实现

    app开发中,通常会有邀请用户给app打分的功能.而在iOS中,正式应用都是通过appStore 下载的,因此给app 打分也只能在 appStore中.因此,需要从应用跳转到appStore.方法是 ...

  3. IOS开发中如何使用通知NSNotification传值

    通知 是在跳转控制器之间常用的传值代理方式,除了代理模式,通知更方便.便捷,一个简单的Demo实现通知的跳转传值. 输入所要发送的信息 ,同时将label的值通过button方法调用传递, - (IB ...

  4. iOS开发中关于本地数据中SQLite数据库常用的SQL语句

    创建表 CREATE TABLE IF NOT EXISTS "student" ("number" INTEGER PRIMARY KEY AUTOINCRE ...

  5. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  6. ios开发中超简单抽屉效果(MMDrawerController)的实现

    ios开发中,展示类应用通常要用到抽屉效果,由于项目需要,本人找到一个demo,缩减掉一些不常用的功能,整理出一个较短的实例. 首先需要给工程添加第三方类库 MMDrawerController: 这 ...

  7. iOS开发中遇到的一些问题及解决方案【转载】

    iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // //  MyScrollView.m //  Creat ...

  8. GIT在iOS开发中的使用

    前言 在iOS开发中,很多公司对项目的版本控制管理都使用了git,当然也有部分公司使用的是svn.当年我最初接触的是svn,觉得使用起来挺方便的,但是每次切分支都需要下载一份新的代码起来,这实在太麻烦 ...

  9. iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

                   在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...

随机推荐

  1. spring4-2-bean配置-6-使用外部属性文件

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAk0AAAFGCAIAAAD4tzxRAAAgAElEQVR4nO2d27HsOm+tOxWn4CeXAm ...

  2. Appium Windows安装

    安装环境 1 安装Nodejs 下载nodejs安装包(http://nodejs.org/download/)安装 测试安装是否成功:运行cmd,输入node -v 2 安装android的SDK ...

  3. VMware 桥接模式 复制物理网络连接状态的作用

    参考: https://docs.vmware.com/cn/VMware-Workstation-Pro/15.0/com.vmware.ws.using.doc/GUID-826323AD-D01 ...

  4. myeclipse便捷导包方式

    1.将spring框架的core导成如图的方式 2.选中项目右键--bulid path--进入buildpath 3.选择add library 4.选择user library 5.选择user ...

  5. HDU 5977 Garden of Eden (树分治+状态压缩)

    题意:给一棵节点数为n,节点种类为k的无根树,问其中有多少种不同的简单路径,可以满足路径上经过所有k种类型的点? 析:对于路径,就是两类,第一种情况,就是跨过根结点,第二种是不跨过根结点,分别讨论就好 ...

  6. hydra(九头蛇)多协议暴力破解工具

    一.简介 hydra(九头蛇)全能暴力破解工具,是一款全能的暴力破解工具,使用方法简单 二.使用 使用hydra -h 查看基本用法 三.命令 hydra [[[-l LOGIN|-L FILE] [ ...

  7. Introduction mybatis

    项目地址 https://github.com/mybatis/mybatis-3 英文官网 http://mybatis.github.io/mybatis-3/ 中文官网 http://mybat ...

  8. JavaScript语言精粹 笔记02 函数

    函数函数对象函数字面量调用参数返回异常给类型增加方法递归作用域闭包回调模块级联套用记忆   函数 1 函数对象 在JS中函数就是对象.对象是“名/值”对的集合并拥有一个连接到原型对象的隐藏连接.对象字 ...

  9. 设计模式22:Strategy 策略模式(行为型模式)

    Strategy 策略模式(行为型模式) 动机(Motivation) 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂:而且有时候支持 ...

  10. jquery cookie用法

    jquery cookie用法(获取cookie值,删除cookie) cookie在jquery中有指定的cookie操作类,下面我先来介绍我们在使用cookie操作类时的一些问题,然后介绍正确的使 ...