[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 ...
随机推荐
- hadoop的第一个hello world程序(wordcount)
在hadoop生态中,wordcount是hadoop世界的第一个hello world程序. wordcount程序是用于对文本中出现的词计数,从而得到词频,本例中的词以空格分隔. 关于mapper ...
- [HNOI2004]树的计数 prufer数列
题面: 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,你的程序需要输出满足d( ...
- POJ1204:Word Puzzles——题解
http://poj.org/problem?id=1204 题目大意:给一个字母表,求一些字符串的开端第一次出现的位置和字符串的方向(字符串可以按照八个方向放在字母表中可匹配的位置) ——————— ...
- 牛客网 Wannafly挑战赛27 蓝魔法师
蓝魔法师 链接: https://www.nowcoder.com/acm/contest/215/C 来源:牛客网 题目描述 "你,你认错人了.我真的,真的不是食人魔."--蓝魔 ...
- 《Java程序设计》第五周学习总结 20165218 2017-2018-2
<Java程序设计>第五周学习总结 20165218 2017-2018-2 教材学习内容总结 第7章 内部类与异常类 内部类 在类中定义另一个类,外嵌类和内部类 内部类可以用外嵌类中的成 ...
- 浴谷夏令营例题Codeforces827DBest Edge Weight(三个愿望,一次满足~(大雾
这题在浴谷夏令营wyx在讲的最小生成树的时候提到过,但并没有细讲怎么写... 这题可以用三种写法写,虽然只有两种能过...(倍增/倍增+并查集/树链剖分 先跑出最小生成树,分类讨论,在MST上的边,考 ...
- 2-SAT入门
大概学了一下2-SAT,写了一道模板和一道USACO 输出一个方案的话,tarjan缩点后倒着拓扑,染色输出. 求任何解下选哪个就得枚举每个点dfs来判断选哪个. HIT 1917(2-sat模板) ...
- Codeforces Round #547 (Div. 3) 题解
Codeforces Round #547 (Div. 3) 题目链接:https://codeforces.com/contest/1141 A,B咕咕了... C. Polycarp Restor ...
- ASP.NET基础学习未整理随笔
利用新建网站添加的项目可以改完代码直接刷新就行 提交到服务程序的表单一定要具有name.<input type="hidden"value="true"n ...
- SQL Server2000安装教程图解
sql2000安装教程图解... ================================= 第一部分:下载所需要的安装包: 可以自己在网上百度了之后下载--或是直接从我已打包好的群里下载 = ...