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