通知与广播

Notification:

显示在手机状态栏的通知。Notification所代表的是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification。

Android3.0增加了Notification.Builder类,该类可以轻松地创建Notification对象。

Notification,俗称通知,是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容。

注意:

1,因为一些Android版本的兼容性问题,对于Notification而言,Android3.0是一个分水岭,如果不考虑向下兼容的问题,构建Notification使用Notification.Builder构建,如果考虑到向下兼容性的问题,一般推荐使用NotificationCompat.Builder构建(NotificationCompat类在v4:android.support.v4.app.NotificationCompat)。

2,在实际使用过程中,一般不会直接构建Notification对象,而是使用它的一个内部类NotificationCompat.Builder来实例化一个对象(Android3.0之下使用Notification.Builder),并设置通知的各种属性,最后通过NotificationCompat.Builder.build()方法得到一个Notification对象。当获得这个对象之后,可以使用NotificationManager.notify()方法发送通知,可通过Activity.getSystemService(String)方法获取NotificationManager对象,Activity.getSystemService(String)方法可以通过Android系统级服务的句柄,返回对应的对象。在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION_SERVICE。
——————————————————————————————————————————
(二)、Notification.Builder类中提供的方法:
builder.setAutoCancel(); 设置点击通知后,状态栏自动删除通知。
builder.setSmallIcon(R.drawable.alert); 设置通知小图标 必须设置
builder.setLargeIcon(R.drawable.alert2); 设置通知大图标
builder.setContentTitle("标题"); 设置通知标题 必须设置
builder.setContentText("文本"); 设置通知内容 必须设置
builder.setDefaults(Notification.DEFAULT_ALL);
设置默认的通知音乐、振动、LED等。
builder.setSound(uri); 设置通知的音乐
builder.setTicker(); 设置通知在状态栏的提示文本。第一次提示消息的时候显示在通知栏上。
builder.setContentIntent(); 设置点击通知后将要启动的程序组件对应的PendingIntent。

进阶方法:

builder.setVibrate(new long[ ]); 按long数组4个参数设置手机震动频次,请求权限
builder.setLights(int(color类颜色字段),int,int);设置LED灯闪烁颜色和间隔

builder.setStyle(new NotificationCompat对象);
new NotificationCompat的方法除了获取Notification对象,也可可以允许我们设置通知的长文本和大图片格式

大图片方法:BigPictureStyle().bigPicture( Bitmap对象);
Bitmap对象需要通过图片解码类BitmapFactory.decodeResource(getResources(),图片对象);获取

长文本方法:BigTextStyle().bigText(String对象);

builder.setPriority(PRORITY_MAX/PRORITY_HIGH/PRORITY_LOW/PRORITY_MIN);设置通知优先级

设置点击通知后的取消方法:

1.使用builder.setAutoCancel(); 设置点击通知后,状态栏自动删除通知
2.在通知启动的活动中调用manager.cancel(id)取消,id为notify(id,Notification对象)时注册的id
——————————————————————————————————————————

Broadcast:

广播接收器,也被称为全局事件,或系统事件。
当Android系统中任何程序有动作时,如果想通知其他程序,采用广播的方式进行传播是非常有效的。广播从理论上说,可以将一个动作传播给任意多个程序(当然,广播接收器的数量会收到系统限制)。

系统完成一定的动作,就会自动发出广播,它只负责“说”而不管你“听不听”,也就是不管你接收方如何处理。

广播的类型:

1).Normal Broadcast:普通广播

此处将普通广播界定为:开发者自己定义的intent,以context.sendBroadcast_"AsUser"(intent, ...)形式。具体可以使用的方法有:
sendBroadcast(intent)/sendBroadcast(intent, receiverPermission)/sendBroadcastAsUser(intent, userHandler)/sendBroadcastAsUser(intent, userHandler,receiverPermission)。
普通广播会被注册了的相应的感兴趣(intent-filter匹配)接收,且顺序是无序的。如果发送广播时有相应的权限要求,BroadCastReceiver如果想要接收此广播,也需要有相应的权限。

2).System Broadcast: 系统广播

Android系统中内置了多个系统广播,只要涉及到手机的基本操作,基本上都会发出相应的系统广播。如:开启启动,网络状态改变,拍照,屏幕关闭与开启,点亮不足等等。每个系统广播都具有特定的intent-filter,其中主要包括具体的action,系统广播发出后,将被相应的BroadcastReceiver接收。系统广播在系统内部当特定事件发生时,有系统自动发出。

3).Local Broadcast:本地广播
通过getInstance()方法获得LocalBroadcastManager类的实例并进行发送与注册。
本地广播无法通过静态注册接受。
性质:保密性,安全性,高效性。

4).Ordered broadcast:有序广播

有序广播的有序广播中的“有序”是针对广播接收者而言的,指的是发送出去的广播被BroadcastReceiver按照先后循序接收。有序广播的定义过程与普通广播无异,只是其的主要发送方式变为:sendOrderedBroadcast(intent, receiverPermission, ...)。

对于有序广播,其主要特点总结如下:

1>多个具当前已经注册且有效的BroadcastReceiver接收有序广播时,是按照先后顺序接收的,先后顺序判定标准遵循为:将当前系统中所有有效的动态注册和静态注册的BroadcastReceiver按照priority属性值从大到小排序,对于具有相同的priority的动态广播和静态广播,动态广播会排在前面。

2>先接收的BroadcastReceiver可以对此有序广播进行截断,使后面的BroadcastReceiver不再接收到此广播,也可以对广播进行修改,使后面的BroadcastReceiver接收到广播后解析得到错误的参数值。当然,一般情况下,不建议对有序广播进行此类操作,尤其是针对系统中的有序广播。

广播的注册:

1、静态注册:
静态注册方式是在AndroidManifest.xml的application里面定义receiver并用<intent-filter>标签设置过滤器,接收指定action广播。。
如果在清单配置文件中配置了广播接收器,那么程序在安装后会自动注册广播接收器。
静态注册方式的特点:不管该应用程序是否处于活动状态,都会进行监听。

新创建接收器class文件继承BroadcastReceiver的类,重写onReceiver方法,并在onReceiver方法中对广播进行处理。
当发生了AndroidManifest.xml中对应事件,就调用当前广播的onReceiver方法。

2、动态注册:
方式是在同一个activity里面新创建内部class继承BroadcastReceiver的类,并调用当前上下文对象的registerReceiver() 方法来注册,和静态的内容差不多。一个形参是receiver对象,另一个是IntentFilter对象。而IntentFilter构造方法的参数是要接收的action。
动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再进行监听。

动态注册广播接收器的特点,就是当用来注册的 Activity 关掉后,广播也就失效了。同时反映了静态注册的一个优势,就是无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器就是打开着的。

//创建自己的接收器
MyReceiver receiver = new MyReceiver();
//创建过滤器,并指定action,使之用于接收同action的广播
IntentFilter filter = new IntentFilter("android.intent.action.PHONE_STATE");
//或者:
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
filter.setPriority(999);
registerReceiver(receiver, filter);//接收器与通知事件注册
发送及接受自定义广播:

接收:
创建自己的接收器继承BroadcastReceiver的类并动态or静态注册,在onReceiver方法中处理具体逻辑。

发送:

// 指定广播目标Action
Intent intent = new Intent("MyReceiver_Action");
//此字段与接收器注册的字段匹配一致则调用其onReceiver方法
// 可通过Intent携带消息
intent.putExtra("msg", "发送广播");
// 发送广播消息
sendBroadcast(intent);
注销BroadcastReceiver:

1、一般在onStart中注册BroadcastReceiver,在onStop中取消BroadcastReceiver。
2、一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)时才有效,当从该方法返回后,该对象就无效的了,结束生命周期。

//动态注册的广播要记住在activity的onDestroy回调方法中注销广播接收器
unregisterReceiver(receiver);
——————————————————————————————————————————
【广播系统大全及实例样本】:http://blog.csdn.net/zhangzhen_v/article/details/51697330
【各种广播详解及版本变迁】:http://www.cnblogs.com/lwbqqyumidi/p/4168017.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容