您的位置:首页 > 其它

安卓四大组件之广播(BroadCastReceiver)

2016-09-16 09:53 781 查看
BroadCastReceiver

是什么?

1.安卓四大组件之一

2.广播接收者对象(接收系统或应用发出的广播)

android中的广播事件有两种:

1)系统广播

-ACTION_BOOT_COMPLETED(系统启动完成后触发)

-ACTION_TIME_CHANGED(系统时间改变时触发)

-

-ACTION_BATTERY_LOW(电量低时触发) 

 注:广播接收器没有用户界面 但它们可以启动一个activity来响应它们收到的信息,

或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等。

 2)自定义广播:(注册及编写)
编写:继承BroadCastReceiver    onReceive(在此方法中可以做其他操作:例如启动service)

  --静态注册  在AndroidManifest.xml文件中 
例如:系统启动完成后的广播 
   - <intent-filter>

<action android:name="android.intent.action.BOOT_COMPLETED"/>

</intent-filter>

使用权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

  --动态注册

MyReceiver mReceiver=new MyReceiver();

IntentFilter filter=new IntentFilter();
filter.addAction("com.tarena.broadcast");

//
registerReceiver(mReceiver, filter);//注册广播,

注:动态组注册时的生命周期与activity周期有关,在销毁页面销毁时要解除绑定unregisterReceiver(mReceiver)   也就是说在哪个页面注册在哪个页面解除

两种注册类型的区别是:

  1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。

  2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被 系统调用自动运行。

在Android 的广播机制中,动态注册的优先级是要高于静态注册优先级的

3. 普通广播

发送:sendBroadCast(Intent intent); 

发送:sendBroadCast(Intent intent,String receiverPermission); 

如果发送时指定了接收权限,则只有在AndroidManifest.xml中用<uses- permission>标签声明了拥有此权限的BroascastReceiver才会有可能接收到发送来的Broadcast。

*同样,若在注册BroadcastReceiver时指定了可接收的Broadcast的权限,则只有在AndroidManifest.xml中 用<uses-permission>标签声明了,拥有此权限的Context对象所发送的Broadcast才能被这个 BroadcastReceiver所接收。

   有序广播(priority)(100-1000)

发送:sendOrderBroadCast(Intent intent,String receiverPermission)  

可以使用abortBroadCast();终止广播传递

如果BroadcastReceiver是代码中注册的话,且其intent-filter拥有相同android:priority属性
的话,先注册的将先收到广播。

   本地广播(只能在本进程内部应用)不能通过静态注册的方式注册

借助借助LocalBroadCastManager

1)获得本地广播对象

a)localBroadcastManager lbManager=LocalBroadcastManager.getInstance(this);

2)注册广播为本地广播

a)LbManager.registerReceiver(receive, filter)

3)发送广播

a)lbManager.sendBroadcast(intent)

4)关闭广播

b)lbManager.unregisterReceiver(receiver);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  broadcastreceiver