ios本地通知UILocalNotification以及区分谁触发了通知
来源:互联网 发布:淘宝的药店靠谱吗 编辑:程序博客网 时间:2024/05/22 17:13
1、在ios中有两类消息推送方式一类使远程推送,一类使本地推送,今天简要记录一下本地推送,代码如下:
UILocalNotification *notification=[[[UILocalNotification alloc] init] autorelease]; NSDateFormatter *formatter=[[NSDateFormatter alloc] init]; [formatter setDateFormat:@"HH:mm:ss"];//还有其他格式,如mm:ss,ss,hh:mm:ss,yyyy-MM-dd HH:mm:ss,HH大写表示24小时计算,小写表示12小时计算, NSDate *now=[formatter dateFromString:@"12:00:00"];//设置每天的十二点通知 notification.fireDate=now;//设置触发时间 notification.timeZone=[NSTimeZone defaultTimeZone];//设置默认时区,另外也可以写一个时区如:[dateformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss +0800"];//表示东八区 //如果repeatInterval为零,则表示不重复 notification.repeatInterval=NSDayCalendarUnit;//设置重复的时间间隔,NSSecondCalendarUnit每秒重复,NSHourCalendarUnit每小时重复,NSDayCalendarUnit每天重复,NSMonthCalendarUnit每月重复 notification.alertBody=@"到中午了,你该吃中午饭了";//设置提示内容 notification.soundName=UILocalNotificationDefaultSoundName;//设置默认的提示声音 [formatter release]; [[UIApplication sharedApplication] scheduleLocalNotification:notification];以上代码实现了一个这样的功能,每天中午的12点提示用户,到中午了,你应该吃中午饭了,另外也可以根据上面注释的说明,设置每小时,每月,每年给用户发消息提醒。
另外如果想要在通知中传递参数可以通过userInfo传递,代码如下:
NSDictionary *dictionary=[NSDictionary dictionaryWithObjectsAndKeys:@"张三",@"name",@"HH:mm:ss",@"firedateformat", nil];//定义了两个key与value notification.userInfo=dictionary;如果想要取消通知的话,有两张方法,一中是取消全部通知,另一中是取消指定的通知,代码如下:
[[UIApplication sharedApplication] cancelAllLocalNotifications];//取消所有的通知 [[UIApplication sharedApplication] cancelLocalNotification:notification];//取消指定的通知另外我们还可以获取当前系统中的所有通知,并且可以通过遍历得到所有的值,代码如下:
NSArray *array=[[UIApplication sharedApplication] scheduledLocalNotifications]; for (UILocalNotification *notification in array) { //在可以我们可以获取本地通知的值,如notification.userInfo等 }如果软件正在前天运行,我们可以通过appdelegate中的回调方法获取并且处理参数,
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{ if(notification!=nil){NSDictionary *userInfo=notification.userInfo; NSString *name=[userInfo objectForKey:@"name"];//获取name参数 NSString *firedateformat=[userInfo objectForKey:@"firedateformat"];//获取firedateformat参数 NSLog(@"名字:%@,触发日期格式:%@",name,firedateformat); } }
下面我们说明一下通知触发的情况,通知触发的情况有两种,一种是程序没有运行,另外一种是程序已经在运行,这种情况有分为两种情况,一种情况是在后天运行时触发,另一种情况是在前天运行时触发,我们先来说在程序没有启动,如果程序没有启动,本地通知触发了,这个时候程序将执行:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
我们可以在此函数中获取本地通知的参数。我们判断UIApplicationLaunchOptionsLocalNotificationKey是否存在,判断方法如下:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ application.applicationIconBadgeNumber=0; UILocalNotification *uinfo=[launchOptions objectForKey:@"UIApplicationLaunchOptionsLocalNotificationKey"]; if(uinfo!=nil){ NSDictionary *dic=uinfo.userInfo//就使本地通知中传递过的NSDictionary,我们可以获取其中的参数。}}另外一种是程序已经在运行,这个时候有前天运行与后台运行,如果在后台运行,这个时候如果通知的时间到了,不会自动触发didReceiveLocalNOtification,用户点击了,通知中心的通知使用触发此函数,我们可以在里面通过上面的方法得当其中的参数,然后执行相应的操作。如程序在前天运行,这个时候就有一种情况,就是时间到了会触发didReceiveLocalNotification,点击通知中心的通知也会触发此函数,这个我们没有办法区分是谁触发了didRecieveLocalNotification,(如当我点击的时候我希望跳转到指定的页面,而时间到了的触发不让跳转,这就没有办法区分了),我们在这儿使用一个小技巧来区分这两种情况。要求我们在通知的时候,通过userInfo传递一下通知时间的格式,如上面的代码,我们通知的时候传递了触发时间的格式,但触发了didReceiveLoalNotification时,我们获取一下日期的格式,使用当前时间与触发的时间比较,如果在某一个非常小的范围内我们就认为是时间到了触发了,而不去触发,否则我们认为是点击触发了,我们执行相应的操作。代码如下:
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{ NSDictionary *userInfo=notification.userInfo; NSString *sfiredateformat=[NSMutableString stringWithString:[userInfo objectForKey:@"firedateformat"]]; NSDateFormatter *formatter=[[[NSDateFormatter alloc] init] autorelease]; [formatter setDateFormat:sfiredateformat]; if([[formatter dateFromString:[formatter stringFromDate:[NSDate date]]] timeIntervalSinceDate:notification.fireDate]>0.5){ //用户点击了, }else{ //时间到了触发的 } }这样我们就区分开了两种情况。
以上是我介绍UILocalNotification情况,欢迎大家指正与补充。谢谢。
- ios本地通知UILocalNotification以及区分谁触发了通知
- iOS本地通知UILocalNotification
- IOS 本地通知 UILocalNotification
- ios本地通知UILocalNotification
- iOS UILocalNotification本地通知
- iOS本地通知:UILocalNotification
- iOS本地通知:UILocalNotification
- iOS UILocalNotification本地通知
- iOS本地通知:UILocalNotification
- iOS本地通知:UILocalNotification
- iOS UILocalNotification本地通知
- iOS本地通知 UILocalNotification
- iOS 本地通知:UILocalNotification
- ios推送:本地通知UILocalNotification
- ios推送:本地通知UILocalNotification
- ios推送:本地通知UILocalNotification
- ios推送:本地通知UILocalNotification
- iOS中的本地通知UILocalNotification
- js php 中文互相传输 编码问题
- signal variable
- JQuery插件Uploadify的使用文档帮助教程
- 一网打尽当下NoSQL类型、适用场景及使用公司
- nginx模块开发-定时器模型
- ios本地通知UILocalNotification以及区分谁触发了通知
- 使用Lvs DR模式实现负载均衡
- Linux设备驱动初始化流程
- inout buffer
- dede头部导航和底部的调用
- JAVA同步代码块
- 敲不出代码,但是上课听的明白,怎么办?
- html5 游戏研究 参考
- Server 2012 Hyper-v新功能之三:Hyper-V 副本