博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UILocalNotification的使用——本地通知
阅读量:4970 次
发布时间:2019-06-12

本文共 3953 字,大约阅读时间需要 13 分钟。

   

Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notification种类,本地和远程。

 

本地的Notification由iOS下NotificationManager统一管理,只需要将封装好的本地Notification对象加入到系统Notification管理机制队列中,系统会在指定的时间激发将本地Notification,应用只需设计好处理Notification的方法就完成了整个Notification流程了。

 

本地Notification所使用的对象是UILocalNotificationUILocalNotification的属性涵盖了所有处理Notification需要的内容。

UILocalNotification的属性有fireDate、timeZone、repeatInterval、repeatCalendar、alertBody、alertAction、hasAction、alertLaunchImage、applicationIconBadgeNumber、soundName和userInfo。

UILocalNotification的调度

其中fireDate、timeZone、repeatInterval和repeatCalendar是用于UILocalNotification的调度。

 

fireDate                 是UILocalNotification的激发的确切时间。

timeZone               是激 发时间是否根据时区改变而改变,如果设置为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的管理,让同样的任务可以非常简单得被处理,而无需让应用浪费资源去等待事件的触发。

#pragma mark -#pragma mark Local Notifications- (void)scheduleAlarmForDate:(NSDate *)theDate { UIApplication *app = [UIApplication sharedApplication];NSArray *oldNotifications = [app scheduledLocalNotifications]; // Clear out the old notification before scheduling a new one.if (0 < [oldNotifications count]) {[app cancelAllLocalNotifications];} // Create a new notificationUILocalNotification *alarm = [[UILocalNotification alloc] init];if (alarm) { alarm.fireDate = theDate;alarm.timeZone = [NSTimeZone defaultTimeZone];alarm.repeatInterval = kCFCalendarUnitSecond;alarm.soundName = @"ping.caf";//@"default";alarm.alertBody = [NSString stringWithFormat:@"Time to wake up!Now is\n[%@]",   [NSDate dateWithTimeIntervalSinceNow:10]];alarm.hasAction = NO;//        alarm.alertAction = @"jjjjjj";        [alarm setAlertLaunchImage:@"taopiao.png"];[app scheduleLocalNotification:alarm];[alarm release];}}

 

 

 

示例参考:

 

转载于:https://www.cnblogs.com/allanliu/p/4269228.html

你可能感兴趣的文章
IDEA使用操作文档
查看>>
如何对网课、游戏直播等进行录屏
查看>>
UIView
查看>>
有关去掉谷歌及火狐浏览器文本框 数字类型 上下箭头的方法
查看>>
MySQL数据迁移到SQL Server
查看>>
复杂链表的复制(python)
查看>>
添加日期选择控件
查看>>
jquery.cookie.js操作cookie
查看>>
javascript遍历数组
查看>>
bzoj4765: 普通计算姬 (分块 && BIT)
查看>>
thinkphp5-----模板中函数的使用
查看>>
POJ-3211 Washing Clothes[01背包问题]
查看>>
[BZOJ4832][Lydsy1704月赛]抵制克苏恩
查看>>
数据库三范式
查看>>
看完漫画秒懂区块链
查看>>
开发工具,做一个有效率的开发者
查看>>
对Haskell这门语言的基本认识
查看>>
mysql 安装补充
查看>>
大学里如何学习 ?
查看>>
Oracle命令类别
查看>>