[How to] UILocalNotification 的使用
1.简介
IOS共分为本地和远程通知两种通知,本问介绍本地通知UILocalNotification的基本使用方法。
2.本地通知的实现:
步骤一:新建工程
在Xcode中新建一个single view的应用工程。
//略
步骤二:给应用像系统注册通知
每一个应用的通知都是需要在系统中注册的,这样系统就能将次应用的通知管理起来,用户可以在设置中进行某个系统通知的设定,如是否开启音效,是否禁用通知等。
在- (void)viewDidLoad方法中增加如下代码:
// 声明当前应用的通知包含哪些交互 UIUserNotificationSettings *set = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound|UIUserNotificationTypeBadge categories:nil]; // 像系统注册当前应用的通知[[UIApplication sharedApplication] registerUserNotificationSettings:set];
此时你可以运行程序,系统将提示你是否接受当前应用的通知,如下:
无论我们如何选择,都可以在系统设置中修改。当我们打开当前应用的通知设定的时候展现如下画面:

此图中正式我们代码中设定的当前通知的一些交互方式和其他一些通用设定。
步骤三:生成通知实体
接下来需要具体的设定你的消息通知实体了,包括通知什么消息,什么时候通知,一共需要通知几次,每个多长时间进行通知等相关设定。
在- (void)viewDidLoad方法中增加如下代码:
// 创建通知实体类
UILocalNotification * theNotification = [[UILocalNotification alloc] init];
//设定通知内容
theNotification.alertBody = @"my notification message";
// 设定当期通知的触发时间
theNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:];
// 时区指定
theNotification.timeZone = [NSTimeZone defaultTimeZone];
// 此设定为应用图标右上角的红色通知计数,当触发现在的通知的时候计数+1
theNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + ;
// 设定完毕后交给系统,定时触发通知
[[UIApplication sharedApplication] scheduleLocalNotification:theNotification];
步骤四:当通知触发后的处理
我们在步骤四中完成了通知单的实体,此时我们运行应用,发现即使到了通知时间但是却毫无相应。但是如果我们再次运行应用,然后快速的返回主屏幕你会发现时间一到后在上方会弹出通知信息。所以在这里所想说的是通知触发后,当一个用处于不通过状态的时候会触发不同的处理方法(代理方法)。
3.原理:
一般的有三种情况需要处理:
- 当前应用处于关闭状态
- 当前应用正在前台运行(当前设备界面为当前应用界面)
- 当前应用处于后台运行
第一种情况:
- 当前应用处于关闭状态
当通知触发后,用户点击屏幕上部的通知tip的时候应用将调用代理的application:didFinishLaunchingWithOptions:方法,所以我们可以在此代理方法中做处理:
// 查看launchOptions中是否存在通知的信息,如果有则可认为此应用是通过点击通知tip进来的
UILocalNotification *locationNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (locationNotification) {
// 为了简单这里只是将通知红色标签设定为0,表示用户已经处理了通知
application.applicationIconBadgeNumber = ;
}
return YES;
其他两种情况:
- 当前应用正在前台运行(当前设备界面为当前应用界面)
- 当前应用处于后台运行
这两种情况都会调用代理方法application:didReceiveLocalNotification:
唯一的区别处理是当应用在前台运行的时候认为用户可以直截了当的去处理通知,所以直接弹出提示框,但是当在后台运行,然后用户在此激活应用的时候就没有必要提示框的存在了。
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
//判断当前应用的状态(前台运行中还是后台运行中)
UIApplicationState state = [application applicationState];
// 当为前台运行的时候直接弹出对话框提示用户
if (state == UIApplicationStateActive) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Reminder"
message:notification.alertBody
delegate:self cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
// 将红色通知提示数设定为0
application.applicationIconBadgeNumber = ;
}
[How to] UILocalNotification 的使用的更多相关文章
- iOS调试通过UILocalNotification或RemoteNotification启动的app
相信很多同学都为调试苹果的通知烦恼过,特别是通过通知启动app这个功能,简直让人欲哭无泪!!! 然而我们都遇到的问题,苹果怎么可能没有想到,原来早就有了官方的解决办法,只是我们不知道而已... 这次又 ...
- 用UILocalNotification实现一个闹钟(Swift)
之前项目需求要实现一个闹钟,github上找了半天发现都是很旧的代码了,所以就准备自己写一个,刚好最近在学习Swift,就用Swift写了一个demo放在这里:https://github.com/P ...
- UILocalNotification本地通知的使用方法
本文所写方法主要应用UILocalNotification达到本地推送通知栏信息 取消了其他教程里过期的UIAlertView方法 使用UILocalNotification主要分为创建 调用 取消 ...
- 本地推送UILocalNotification
//本地推送---无需网络,由本地发起 UILocalNotification *localNotification = [[UILocalNotification alloc]init]; //设置 ...
- ios 把已经点击过的UILocalNotification 从系统的通知中心现实中移除
在ios7 上一个uilocalnotification在中心现实后,点击该消息,程序被唤醒了,但是该通知没有被移除.用了以下的代码后可以解决这个问题 UIApplication.sh ...
- iOS UILocalNotification 每2周,每两个月提醒
iOS 的UILocalNotification提醒提供了默认的重复频率,比如,一天,一个星期等等,但是对于非标准的频率,比如每,2周,每2个月,无法重复提醒. 我们的思路是在应用程序开始时,把即将发 ...
- iOS - iPhone开发 UILocalNotification的使用
OS下的Notification的使用 Notification 是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iO ...
- Swift - 推送之本地推送(UILocalNotification)添加Button的点击事件
上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息 import UIKit @UIApplicationMain class AppDelegate: UIResponder, ...
- Swift - 推送之本地推送(UILocalNotification)
// 本地推送通知是通过实例化UILocalNotification实现的.要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户. ...
- ios推送:本地通知UILocalNotification
Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notificati ...
随机推荐
- Oracle-RAC原理
Oracle-RAC原理 来源 https://blog.csdn.net/qq_34556414/article/details/79001267 单点数据库 VS RAC 单节点数据库,如果实例宕 ...
- [Leetcode] valid parentheses 有效括号对
Given a string containing just the characters'(',')','{','}','['and']', determine if the input strin ...
- PHP 数据库防止攻击
定义和用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符. 下列字符受影响: \x00 \n \r \ ' " \x1a 如果成功, ...
- Linux之ioctl20160705
ioctl(fdAcodec, ACODEC_GET_ADCL_VOL, &vol_ctrl)//从内核驱动中获取或者设置数据//内核驱动中也使用ACODEC_GET_ADCL_VOL进行ca ...
- mybatis生成的pojo 中的属性或方法不够我们当做dto使用时
我们在写代码的时候,如果一个 mybatis生成的pojo 中的属性或方法不够我们使用(当做dto和前台交互)时,我们有两种方法: 第一: 直接在 原 pojo 中增加属性或者方法 第二:我们可以再写 ...
- 《python核心编程》读书笔记--第18章 多线程编程
18.1引言 在多线程(multithreaded,MT)出现之前,电脑程序的运行由一个执行序列组成.多线程对某些任务来说是最理想的.这些任务有以下特点:它们本质上就是异步的,需要多个并发事务,各个事 ...
- JS 中类型鉴别
JS中的基本类型有:数字(Number(NaN,Infinity)),字符串(String),Undefined,Null,Boolean 引用类型有:数组(Array),对象(Object),函数( ...
- HDU1522 稳定婚姻匹配 模板
Marriage is Stable Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU1254 bfs
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hbase的Region分裂代码分析
region分裂有2种触发情景:1是用户手动触发(参见HRegionServer的splitRegion方法),2是后台flush线程flush完一个region的memstore时,会去检查这个re ...