iOS中 本地通知/本地通知详解 韩俊强的博客
布局如下:(重点讲本地通知)
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中 本地通知/本地通知详解 韩俊强的博客的更多相关文章
- iOS中 扫描二维码/生成二维码详解 韩俊强的博客
最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 指示根视图: se ...
- iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 ...
- iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret, ...
- iOS中 蓝牙2.0详解/ios蓝牙设备详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 整体布局如下: 程序结构如右图: 每日更新关注:http://weibo.com/hanjunqiang ...
- iOS中 CoreGraphics快速绘图(详解) 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 第一步:先科普一下基础知识: Core Graphics是基于C的API,可以用于一切绘图操作 Core Graph ...
- iOS中 语音识别功能/语音转文字教程详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 原文地址:http://blog.csdn.net/qq_31810357/article/details/5111 ...
- iOS中 断点下载详解 韩俊强的博客
布局如下: 基本拖拉属性: #import "ViewController.h" #import "AFNetworking.h" @interface Vie ...
- iOS中 项目开发易错知识点总结 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 点击return取消textView 的响应者 - (BOOL)textFieldShouldReturn:(UI ...
- iOS中 支付宝钱包具体解释/第三方支付 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! iOS开发人员交流QQ群: 446310206 一.在app中成功完毕支付宝支付的过程 1.申请支付宝钱包.參考网 ...
随机推荐
- C++值传递与引用传递
值传递:形参是对实参的拷贝,改变形参的值不会改变外部实参的值,从被调用的角度来说,值传递时单向传递(实参->形参),参数的值只能传入,不能传出. 当函数内部需要修改参数,并且不希望这个改变影响调 ...
- 数据权限管理中心 - 基于mybatis拦截器实现
数据权限管理中心 由于公司大部分项目都是使用mybatis,也是使用mybatis的拦截器进行分页处理,所以技术上也直接选择从拦截器入手 需求场景 第一种场景:行级数据处理 原sql: select ...
- 谷歌开发者:看可口可乐公司是怎么玩转TensorFlow的?
在这篇客座文章中,可口可乐公司的 Patrick Brandt 将向我们介绍他们如何使用 AI 和 TensorFlow 实现无缝式购买凭证. 可口可乐的核心忠诚度计划于 2006 年以 MyCoke ...
- Vue2学习(3)
子组件索引 尽管有 props 和 events,但是有时仍然需要在 JavaScript 中直接访问子组件.为此可以使用 ref 为子组件指定一个索引 ID.例如: <div id=" ...
- postman 模拟请求中添加 header,post请求中传json参数
1. GET 请求 2.Post 请求 (请求参数为Json,header中带有参数) 问题延伸 GET请求不能够 添加 Body 吗?[答案]
- 简介JSP与FreeMarker及Volicity区别
FreeMarker FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个 ...
- 55. Jump Game(中等)
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- 关于html+ashx开发中几个问题的解决方法
在跟html+ashx打交道的园友们肯定会发现,这种模式虽然优美,但在开发中会遇到一些难处理的地方.我也不例外,下面是自己在实际开发中总结出来的几条经验,希望跟大家分享,更希望得到大家的建议和更好的解 ...
- opencv视屏流嵌入wxpython框架
前几篇博客分享搭建人脸识别与情绪判断的环境和源码,但是没有UI,界面很难看,一打开就是opencv弹出的一个视屏框.处女座的我看着非常难受,于是决定做一个UI,稍微规矩好看一点,再怎么说,这样的话也算 ...
- Appium--入门demo
Appium环境搭建已经在在博客中写出 http://www.cnblogs.com/feimaoyuzhubaobao/p/5057832.html 那么本篇博客主要介绍java版本的appiu ...