[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 ...
随机推荐
- powerdesigner 点击preview 语句出现 if exists
drop table if exists XXX 这个是sql server 写法.如果要切换为 Oracle 写法 菜单栏: database-->change curren DBMS 选择你 ...
- Docker-端口映射
Docker-端口映射 Docker端口映射 docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的. 亦可使用Dockerfile文件中的EXP ...
- 【BZOJ3240】【NOI2013】矩阵游戏(数论)
[BZOJ3240][NOI2013]矩阵游戏(数论) 题面 BZOJ 题解 搞什么矩阵十进制快速幂加卡常? 直接数学推导不好吗? 首先观察如何从每一行的第一个推到最后一个 \(f[i]=a·f[i- ...
- BZOJ3930:[CQOI2015]选数——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3930 https://www.luogu.org/problemnew/show/P3172#sub ...
- HDOJ(HDU).2546 饭卡(DP 01背包)
HDOJ(HDU).2546 饭卡(DP 01背包) 题意分析 首先要对钱数小于5的时候特别处理,直接输出0.若钱数大于5,所有菜按价格排序,背包容量为钱数-5,对除去价格最贵的所有菜做01背包.因为 ...
- 项目管理---git----快速使用git笔记(一)------git的简单介绍
最近svn代码管理服务器崩溃了,切换到git来运作. 经过几天的使用,感觉很不错. 尤其是代码合并到正式版本之前 可以对代码进行 code review. 这样能很好的保证团队的代码质量和一些重复代码 ...
- ubuntu切割mp3文件
ffmpeg -i InputFile -vn -acodec copy -ss 00:00:00 -t 00:01:32 OutPutFile
- nginx 服务器启动、终止、重启
启动 在linux系统下输入命令: nginx地址 -c nginx配置文件 就可启动nginx eg:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/ ...
- Tomcat报错java.lang.ClassNotFoundException: 2localhost.org.apache.juli.FileHandler
Can't load log handler "1catalina.org.apache.juli.FileHandler" java.lang.ClassNotFoundExce ...
- 知问前端——Ajax提交表单
本文,运用两大表单插件,完成数据表新增的工作. 一.创建数据库 创建一个数据库,名称为:zhiwen,表——user表,字段依次为:id.name.pass.email.sex.birthday.da ...