[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 ...
随机推荐
- 什么是Docker?(6-12)
关于什么是Docker,刚开始学的时候一脸懵X,这个东西到底是干嘛用的啊?偶然间在知乎上刷到一个比较通俗的解释: Docker就相当于一个容器,这个容器了不得了,它里面能搭好你项目需要的所有环境,并且 ...
- [CF888G]Xor-MST
题目大意:给一个$n$个点的完全图,第$i$个点有点权$v_i$,一条边$x-y$的边权为$v_x\oplus v_y$,求最小生成树 题解:明显$Kruskal$和$Prim$都会$TLE$,有一种 ...
- 923c C. Perfect Security
Trie树. 要求字典序最小,所以由前到后贪心的选择.建一个trie树维护b数列. #include<cstdio> #include<algorithm> #include& ...
- 欢迎大家收听喜马拉雅,我的主播频道http://m.ximalaya.com/weizhubo/44966139
关注光荣之路软件技术培训账号,即时收取测试开发技术的免费公开课信息,各大公司测试及开发招聘信息.最新的技术咨询.线下测试 喜马拉雅微电台,每天早晨光荣之路创始人吴老,都会跟大家一起分享测试行业心得体会 ...
- push与createElement性能比较
下面的实验是验证push()函数与CreateElement()函数在创建HTML元素的效率.可以看出,实用push()确实效率要比后者要高,不过究竟可以高出多少,还需要有专研精神的朋友去测试了,这里 ...
- shell中的颜色显示
By francis_hao Sep 30,2017 图片来自参考[1] 其中,"033"是八进制数,其对应的asciima也就是ESC.后面的颜色格式为:[背景 ...
- ACE接受器-连接器模式
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/22/600191.html 接受器-连接器设计模式(Acceptor-Connector)使分 ...
- 二叉树中和为某一值得路径 java实现
本题来自<剑指offer> 路径为从根节点到叶节点一条路径,路径经过的各节点数值之和等于某一给定数值,则打印路径上的节点 因为需要打印满足条件的路径节点信息和各节点之和,需要栈记录经过的节 ...
- 最新eclipse安装SVN插件
转载自:http://welcome66.iteye.com/blog/1845176 eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录里 ...
- css渐变知识知多少
<!DOCTYPE html><html><head><meta charset="utf-8"> <title>教程( ...