UILocalNotification详解

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。



调度本地通知:

设置通知出发时间:

@property(nonatomic, copy) NSDate *fireDate
例如:

notification.fireDate=[NSDate dateWithTimeIntervalSinceNow:10.0];//通知触发的时间,10s以后

设置本地时区:

@property(nonatomic, copy) NSTimeZone *timeZone
例如:

notification.timeZone = [NSTimeZone defaultTimeZone]; // 使用本地时区  

设置重复间隔:

@property(nonatomic) NSCalendarUnit repeatInterval
例如:

notification.repeatInterval = kCFCalendarUnitDay;  
repeatInterval是UILocalNotification被重复激发之间的时间差,不过时间差是完全根据日历单位(NSCalendarUnit)的,例如每周激发的单位,NSWeekCalendarUnit,如果不设置的话,将不会重复激发。


repeatInterval表示通知的重复间隔,在SDK中定义如下:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. @property(nonatomic) NSCalendarUnit repeatInterval;      // 0 means don't repeat  

其取值主要有:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSCalendarUnitEra                = kCFCalendarUnitEra,  
  2. NSCalendarUnitYear               = kCFCalendarUnitYear,  
  3. NSCalendarUnitMonth              = kCFCalendarUnitMonth,  
  4. NSCalendarUnitDay                = kCFCalendarUnitDay,  
  5. NSCalendarUnitHour               = kCFCalendarUnitHour,  
  6. NSCalendarUnitMinute             = kCFCalendarUnitMinute,  
  7. NSCalendarUnitSecond             = kCFCalendarUnitSecond,  
  8. NSCalendarUnitWeekday            = kCFCalendarUnitWeekday,  
  9. NSCalendarUnitWeekdayOrdinal     = kCFCalendarUnitWeekdayOrdinal,  

分别表示一个世纪、一年、一个月等等,0表示不重复。具体可以查看 CFCalendar Reference

repeatInterval的下限应该是NSCalendarUnitMinute,即每分钟重复发送一次通知。

如果设置为NSCalendarUnitSecond,那么消息不会重复,每秒发送一次通知,iOS系统当然不会容许这样的存在了。

这里比较不好的一点是该值不能自定义(很遗憾,NSCalendarUnit是个枚举类型),例如你不能塞个10.0给它从而希望它每十秒重复一次。所以如果你想每20分钟发送一次通知,一小时内发送3次,那么只能同时设定三个通知了。




重复激发所使用的日历单位需要参考的日历:

@property(nonatomic, copy) NSCalendar *repeatCalendar
repeatCalendar是UILocalNotification重复激发所使用的日历单位需要参考的日历,如果不设置的话,系统默认的日历将被作为参考日历。


设置出发通知的地理区域:

@property(nonatomic, copy) CLRegion *region

构成推送的内容:

推送文字内容:

@property(nonatomic, copy) NSString *alertBody
例如:

notification.alertBody   = @"需要更新";  

锁屏时显示的滑块slide to后面的文字内容:

@property(nonatomic, copy) NSString *alertAction
例如:

notification.alertAction = NSLocalizedString(@"起床了", nil); 

推送内容的短描述:

@property(nonatomic, copy) NSString *alertTitle

是否显示控制按钮:

@property(nonatomic) BOOL hasAction
hasAction是一个控制是否在提醒框中显示动作按钮的布尔值,默认值为YES。


推送提醒加载的图片:

@property(nonatomic, copy) NSString *alertLaunchImage
alertLaunchImage是在用户点击提醒框中动作按钮(“View”)时,等待应用加载时显示的图片,这个将替代应用原本设置的加载图片。


推送组类别的名称:

@property(nonatomic, copy) NSString *category


配置通知的其他部分:

设置应用程序右上角的提醒个数:

@property(nonatomic) NSInteger applicationIconBadgeNumber

通知声音:

@property(nonatomic, copy) NSString *soundName
soundName是另一个UILocalNotification用来提醒用户的手段,在Notification被激发之后将播放这段声音来提醒用户有Notification需要处理,如果不设soundName的话,Notification被激发是将不会有声音播放,除去应用特制的声音以外,也可以将soundName设为UILocalNotificationDefaultSoundName来使用系统默认提醒声音。


设置通知用户信息:

@property(nonatomic, copy) NSDictionary *userInfo
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];


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值