布局如下:(重点讲本地通知)

iOS开发者交流QQ群: 446310206

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

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。

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

1.首先要明白模拟器和真机的区别:模拟器不会有音频提示,另外就是没有检测允许接受通知,所以我补充一下几点:

1.添加监测通知:

 if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){

        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
    }

上代码:

#import "ViewController.h"
#import "DetailViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *schedule;
@property (weak, nonatomic) IBOutlet UIButton *unSchedule;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

// 调度通知
- (IBAction)schedule:(UIButton *)sender {

    // 1.创建通知
    UILocalNotification *ln = [[UILocalNotification alloc]init];

    if (ln) {
        // 设置时区
        ln.timeZone = [NSTimeZone defaultTimeZone];
        // 通知第一次发出的时间
        ln.fireDate = [[NSDate date]dateByAddingTimeInterval:5];

        // 2.设置通知属性
        ln.soundName = @"click.wav"; // 音效文件名
        // 通知的具体内容
        ln.alertBody = @"重大新闻:小韩哥的博客又更新了,赶快进来看看吧!....";

        // 锁屏界面显示的小标题,完整标题:(“滑动来”+小标题)
        ln.alertAction = @"查看新闻吧";

        // 设置app图标数字
        ln.applicationIconBadgeNumber = 10;

        // 设置app的额外信息
        ln.userInfo = @{
                        @"icon":@"text.png",
                        @"title":@"重大新闻",
                        @"time":@"2016-02-28",
                        @"body":@"重大新闻:小韩哥的博客又更新了,赶快进来看看吧!"
                        };
        // 设置重启图片
        ln.alertLaunchImage = @"101339g76j7j9t2zgzdvkj.jpg";

        // 设置重复发出通知的时间间隔
//        ln.repeatInterval = NSCalendarUnitMinute;

        // 3.调度通知(启动任务,在规定的时间发出通知)
        [[UIApplication sharedApplication]scheduleLocalNotification:ln];
        // 直接发出通知没意义
//        [[UIApplication sharedApplication]presentLocalNotificationNow:ln];
    }

}
- (IBAction)noSchedule:(UIButton *)sender
{
//    [[UIApplication sharedApplication]cancelAllLocalNotifications];
    // 已经发出且过期的通知会从数组里自动移除
    NSArray *notes = [UIApplication sharedApplication].scheduledLocalNotifications;
    NSLog(@"%@",notes);
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UILocalNotification *)note
{
    DetailViewController *detailVC = segue.destinationViewController;
    detailVC.userInfo = note.userInfo;
}
@end

2.通知详情页面设置基本属性:

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

.h
#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController

@property (nonatomic, strong) NSDictionary *userInfo;
@end

.m
#import "DetailViewController.h"

@interface DetailViewController ()
@property (weak, nonatomic) IBOutlet UILabel *userInfoContent;

@end

@implementation DetailViewController

- (void)viewDidLoad {
    [super viewDidLoad];

     self.userInfoContent.text = self.userInfo[@"body"];
}

- (void)setUserInfo:(NSDictionary *)userInfo
{
    _userInfo = userInfo;
}
@end

3.didFinishLaunchingWithOptions 实时监测:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //注册本地通知

    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){

        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
    }

//    NSLog(@"-----didFinishLaunchingWithOptions---");
    UILabel *label = [[UILabel alloc]init];
    label.frame = CGRectMake(0, 64, 320, 100);
    label.backgroundColor = [UIColor redColor];
    label.font = [UIFont systemFontOfSize:11];
    label.numberOfLines = 0;
    label.textColor = [UIColor whiteColor];
    label.text = [launchOptions description];
    [[[self.window.rootViewController.childViewControllers firstObject] view]addSubview:label];

    UILocalNotification *note = launchOptions[UIApplicationLaunchOptionsURLKey];
    if (note) {
        label.text = @"点击本地通知启动的程序";
    }else{
        label.text = @"直接点击app图标启动的程序";
    }
    self.label = label;
    return YES;
}
/**
 * 当用户点击本地通知进入app的时候调用(app当时并没有被关闭)
 * 若app已关闭不会被调用此方法
 */
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    self.label.text = @"点击通知再次回到前台";
    ViewController *homeVC = [self.window.rootViewController.childViewControllers firstObject];
//    [homeVC performSegueWithIdentifier:@"toHome" sender:notification];
    [homeVC performSegueWithIdentifier:@"toHome" sender:notification];

}

三种情况展示:(重要)

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

1.程序运行在后台

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

Demo下载地址Github:  https://github.com/XiaoHanGe/LocalNotification

iOS开发者交流QQ群:
446310206

iOS中 本地通知/本地通知详解 韩俊强的博客的更多相关文章

  1. iOS中 扫描二维码/生成二维码详解 韩俊强的博客

    最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: se ...

  2. iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 ...

  3. iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret, ...

  4. iOS中 蓝牙2.0详解/ios蓝牙设备详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 整体布局如下:     程序结构如右图: 每日更新关注:http://weibo.com/hanjunqiang  ...

  5. iOS中 CoreGraphics快速绘图(详解) 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 第一步:先科普一下基础知识: Core Graphics是基于C的API,可以用于一切绘图操作 Core Graph ...

  6. iOS中 语音识别功能/语音转文字教程详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 原文地址:http://blog.csdn.net/qq_31810357/article/details/5111 ...

  7. iOS中 断点下载详解 韩俊强的博客

    布局如下: 基本拖拉属性: #import "ViewController.h" #import "AFNetworking.h" @interface Vie ...

  8. iOS中 项目开发易错知识点总结 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 点击return取消textView 的响应者 - (BOOL)textFieldShouldReturn:(UI ...

  9. iOS中 支付宝钱包具体解释/第三方支付 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! iOS开发人员交流QQ群: 446310206 一.在app中成功完毕支付宝支付的过程 1.申请支付宝钱包.參考网 ...

随机推荐

  1. 假定某系统提供硬件的访管指令(例如形式:“svc n”),为了实现系统调用,系统设计者应做哪些工作?用户又如如何请求操作系统服务?

    工作: 1.  编写并调试好能实现各种功能的例行子程序. 2.  编写并调试好访管中断处理程序. 3.  构造例行子程序入口地址表. 在用户程序中,需要请求操作系统服务的地方安排一条系统调用.这样,当 ...

  2. Java Servlet 笔记1

    1. 什么是Servlet. Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序 ...

  3. C语言程序设计第二次作业--顺序结构

    C语言程序设计第二次作业--顺序结构 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido ...

  4. K-means聚类 的 Python 实现

    K-means聚类 的 Python 实现 K-means聚类是一个聚类算法用来将 n 个点分成 k 个集群. 算法有3步: 1.初始化– K 个初始质心会被随机生成 2.分配 – K 集群通过关联到 ...

  5. Linux学习之CentOS(五)--CentOS下VMware-Tools安装

    已经进入到了Linux学习之CentOS的第六篇随笔了,所以这里就介绍一下VMware-Tools的安装. VMware-Tools的安装 VMware-Tools 主要的功能就是让用户在虚拟机和真实 ...

  6. 触发事件trigger

    触发事件,在本例中,文档加载好之后,就触发dblclick双击事件,而不是通过去手动双击. <script src="http://how2j.cn/study/jquery.min. ...

  7. img图片占不满整个div

    解决方法: img标签自带有3px的空隙,有很多解决方法第一种:设置img{font-size:0}第二种:设置img{display:block}第三种:设置img{vertical-align:t ...

  8. javascript装饰器模式

    装饰器模式 什么是装饰器 原名decorator 被翻译为装饰器 可以理解为装饰 修饰 包装等意 现实中的作用 一间房子通过装饰可以变得更华丽,功能更多 类似一部手机可以单独使用 但是很多人都愿意家个 ...

  9. IntelliJ IDEA安装配置

    1. 从官网安装最新版IntelliJ Idea软件. 2. 激活使用 http://www.3322.cc/soft/37661.html 3. 配置eclipse快捷键 File-->Set ...

  10. angular2+ionic2架构介绍

    不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2+typescript 2. 项目结构 3. S ...