UILocalNotification本地通知介绍
来源:互联网 发布:58到家数据分析待遇 编辑:程序博客网 时间:2024/04/25 14:46
Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notification种类,本地和远程。本地的Notification由iOS下NotificationManager统一管理,只需要将封装好的本地Notification对象加入到系统Notification管理机制队列中,系统会在指定的时间激发将本地Notification,应用只需设计好处理Notification的方法就完成了整个Notification流程了。
本地Notification所使用的对象是UILocalNotification,UILocalNotification的属性涵盖了所有处理Notification需要的内容。UILocalNotification的属性有fireDate、timeZone、repeatInterval、repeatCalendar、alertBody、alertAction、hasAction、alertLaunchImage、applicationIconBadgeNumber、soundName和userInfo。
UILocalNotification的调度
其中fireDate、timeZone、repeatInterval和repeatCalendar是用于UILocalNotification的调度。fireDate是UILocalNotification的激发的确切时间。timeZone是UILocalNotification激发时间是否根据时区改变而改变,如果设置为nil的话,那么UILocalNotification将在一段时候后被激发,而不是某一个确切时间被激发。repeatInterval是UILocalNotification被重复激发之间的时间差,不过时间差是完全根据日历单位(NSCalendarUnit)的,例如每周激发的单位,NSWeekCalendarUnit,如果不设置的话,将不会重复激发。repeatCalendar是UILocalNotification重复激发所使用的日历单位需要参考的日历,如果不设置的话,系统默认的日历将被作为参考日历。
UILocalNotification的提醒内容
alertBody、alertAction、hasAction和alertLaunchImage是当应用不在运行时,系统处理
UILocalNotification提醒是需要的内容。alertBody是一串现实提醒内容的字符串(NSString),如果alertBody未设置的话,Notification被激发时将不现实提醒。alertAction也是一串字符(NSString),alertAction的内容将作为提醒中动作按钮上的文字,如果未设置的话,提醒信息中的动作按钮将显示为“View”相对文字形式。alertLaunchImage是在用户点击提醒框中动作按钮(“View”)时,等待应用加载时显示的图片,这个将替代应用原本设置的加载图片。hasAction是一个控制是否在提醒框中显示动作按钮的布尔值,默认值为YES。
UILocalNotification的其他部分
applicationIconBadgeNumber、soundName和userInfo将使UILocalNotification更完整。applicationIconBadgeNumber是显示在应用图标右上角的数字,这样让用户直接了解到应用需要处理的Notification。soundName是另一个UILocalNotification用来提醒用户的手段,在Notification被激发之后将播放这段声音来提醒用户有Notification需要处理,如果不设soundName的话,Notification被激发是将不会有声音播放,除去应用特制的声音以外,也可以将soundName设为UILocalNotificationDefaultSoundName来使用系统默认提醒声音。userInfo是Notification用来传递数据的NSDictionary。
登记UILocalNotification
在设置完UILocalNotification对象之后,应用需要在系统Notification处理队列中登记已设置完的UILocalNotification对象。登记UILocalNotification * localNotification的方式为:
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
在有些时候,应用可能需要直接激发一个Notification而不是等一段时间在激发,应用可以以下的方式直接触发已设好的Notification:
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
处理UILocalNotification
在提醒框动作按钮被点击后,应用开始运行时,可以在-(BOOL)application:didFinishLaunchingWithOptions:这个Application delegate方法中处理。可以通过以下方式来加载为最近未处理的Notification:
UILocalNotification * localNotif=[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
如果应用正在运行时,可以通过覆盖在Application Delegate中的方法-(void)application:didReceiveLocalNotification:来处理Notification。作为方法的第二个参数为UILocalNotification对象,只需处理对象携带的userInfo来处理响应的动作。
取消UILocalNotification
可以使用以下两个方式来取消一个已经登记的Notification,第一个方式可以直接取消一个指定的Notification,第二个方式将会把该应用已登记的Notification一起取消
[[UIApplication sharedApplication] cancelLocalNotification:localNotification];
[[UIApplication sharedApplication] cancelAllLocalNotification];
总结
本地Notification的机制在应用开发中非常有效,可以很好的帮助开发者管理一些指定时间需要发生的事件,例如闹钟类的应用。而且因为系统统一对Notification的管理,让同样的任务可以非常简单得被处理,而无需让应用浪费资源去等待事件的触发。
对本地通知的数量限制,iOS最多允许最近本地通知数量是64个,超过限制的本地通知将被iOS忽略。
代码:
// 执行通知一定要退出应用或挂起应用(进入后台)才能收到通知。
// 创建本地通知
UILocalNotification *notification = [[UILocalNotification alloc] init];
// 通知触发时间
// 10秒钟之后触发notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];
// 通知时区
// 使用本地时区notification.timeZone = [NSTimeZone defaultTimeZone];
// 通知提示内容
notification.alertBody = @"你收到一个通知";
// 通知提示音
//使用默认的通知提示音notification.soundName = UILocalNotificationDefaultSoundName;
// 应用程序右上角显示的数字
notification.applicationIconBadgeNumber = 2;
// 数据字典
notification.userInfo = @{@"userName": @"JIM", @"age": @(11)};
// 启动这个通知
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
// 进入前台,清除右上角图标
- (void)applicationWillEnterForeground:(UIApplication *)application{ [application setApplicationIconBadgeNumber:0];}
// 点顶端通知进入应用
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"标题" message:notification.userInfo[@"userName"] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alert show];}
// 清除当前应用所有通知
[[UIApplication sharedApplication] cancelAllLocalNotifications];
- UILocalNotification本地通知介绍
- 本地通知UILocalNotification
- UILocalNotification 本地通知
- iOS本地通知UILocalNotification
- IOS 本地通知 UILocalNotification
- ios本地通知UILocalNotification
- 本地通知UILocalNotification
- iOS UILocalNotification本地通知
- 本地通知UILocalNotification
- iOS本地通知:UILocalNotification
- 本地通知UILocalNotification
- UILocalNotification 本地通知
- 本地通知UILocalNotification
- iOS本地通知:UILocalNotification
- iOS UILocalNotification本地通知
- UILocalNotification一本地通知
- iOS本地通知:UILocalNotification
- 本地通知UILocalNotification
- jstl 标签
- (libgdx学习)InputProcessor InputMultiplexer
- ACM OJ SITE
- 润乾报表报表组如何使用openxml方式导出excel
- pat 1051
- UILocalNotification本地通知介绍
- LDAP 常用名词
- Android系统硬件抽象层原理与实现之GPS
- maven3实战之坐标和依赖(最佳实践之排除依赖)
- BloomFilter——大规模数据处理利器
- 微信开发实例视频教程-深入浅出微信公众平台实战开发
- c++中的指针和引用区别
- 网站部署
- 单片机中C语言sbit使用方法