UILocalNotification一本地通知

在 ios 开发中,经常会使用到通知的功能。而通知又分为本地通知和远程通知。远程通知的实现有很多中,可以利用第三方实现。本文主要介绍本地通知的使用,远程通知会在后面给大家介绍。要实现本地通知的功能很简单,只需要一个类就够了。这个类就是UILocalNotification。通过它就能轻轻松松实现本地通知的功能。下面直接上代码

/**
 *  设置本地通知
 */
- (void)settingNotication{
    // 判断是否是 ios8以上的系统。如果是 ios8 只需要主动向用户注册通知设置(比如是否运行弹框,设置图标右上角数字等)
    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]];
    }
    // 创建本地推送对象
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    // 设置通知触发时间
    notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
    // 设置时区(为空则使用默认时区,该属性值决定了fireDate的时间)
    notification.timeZone = [NSTimeZone defaultTimeZone];
    // 设置推送重复间隔时间(这里设置了一分钟推送一次通知)
    notification.repeatInterval = NSCalendarUnitMinute;
    // 设置通知声音(可以指定一个声音文件名,包括扩展名。声音文件时长不能超过30秒,超过30秒系统会使用默认的声音)
    notification.soundName = UILocalNotificationDefaultSoundName;
    // 设置通知内容(该属性值为 nil,则通知触发了也不会有任何提示)
    notification.alertBody = @"是时候吃早餐了";
    // 设置应用图片右上角显示的文字
    notification.applicationIconBadgeNumber = 10;
    // 设置用户点击提醒框中动作按钮(“View”)时,等待应用加载时显示的图片,这个将替代应用原本设置的加载图片
    // 该属性在 ios8下没有效果
    notification.alertLaunchImage = @"images";
    // 在锁屏情况下,该属性替换“slide to unlock” 中“unlock”
    notification.alertAction = @"去吃早餐";
    // 传递数据
    notification.userInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"测试通知001",@"notificationId", nil];
    
    // 将通知登记到系统Notification处理队列中(这一步非常重要,没有这一步,创建出来的通知可以说废的)
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];
}

运行效果图

   

图一:没有锁屏的情况下

   

图二:锁屏情况下

如何处理UILocalNotification?

在提醒框动作按钮被点击后,应用开始运行是,可以在-(BOOL)application:didFinishLaunchingWithOptions:这个Application delegate方法中处理。可以通过以下方式来加载最近未处理的通知。UILocalNotification *localNotif=[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];如果应用正在运行时,可以通过覆盖在Application Delegate中的方法

-(void)application:didReceiveLocalNotification:来处理Notification。作为方法的第二个参数为UILocalNotification对象,

只需处理对象携带的userInfo来处理响应的动作。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification {
    // 处理接收到的本地通知
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"接收到本地提醒p" message:notification.alertBody
     delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
    [alert show];
    //在这里你就可以通过notification的useinfo做自己想做的事情
    // ..........................
    // 取消某个特定的本地通知
    for (UILocalNotification *noti in [[UIApplication sharedApplication] scheduledLocalNotifications]) {
        NSString *notiID = noti.userInfo[@"notificationId"];
        NSString *receiveNotiID = notification.userInfo[@"notificationId"];
        if ([notiID isEqualToString:receiveNotiID]) {
            [[UIApplication sharedApplication] cancelLocalNotification:notification];
            return;
        }
    }
}
总结

本地通知的机制在应用开发中非常有效,可以很好的帮助开发者管理一些指定时间需要发生的事件,例如闹钟类的应用。而且因为系统统一对本地通知的管理,让同样的任务可以非常简单得被处理,而无需让应用浪费资源去等待事件的触发。


发布了10 篇原创文章 · 获赞 1 · 访问量 5890

猜你喜欢

转载自blog.csdn.net/pkxwyf/article/details/41820235