Android四大组件之BroadcastReceveier

来源:互联网 发布:淘宝如何设置图片保护 编辑:程序博客网 时间:2024/05/22 10:41

Android四大组件之BroadcastReceveier

@(Blog)[马克飞象|Markdown|Android]

什么是BroadcasetReceveier

在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。
上面是在其他地方粘来的解释,我的理解是这就是一个事件监听器,用于监听系统发送生的一些事件,比如电量不足、网络变化等。

使用

只需要继承BroadcasetReceveier并实现onReceive即可。

public class SystemBroadcastReceiver extends BroadcastReceiver {    private static final String TAG = "SystemBroadcastReceiver";    @Override    public void onReceive(Context context, Intent intent) {        //Log.d(TAG, context.toString());        Toast.makeText(context, "网络变化", Toast.LENGTH_SHORT).show();    }}

提示
如果你是在activity或service中注册的,onReceive的context就是表示你进行注册时所在的context,如果是采用静态注册的,则是android.app.ReceiverRestrictedContex

注册

  1. 静态注册
    在AndroidManifest.xml文件中加入以下代码
<receiver    android:name=".broadcastreceiver.SystemBroadcastReceiver">    <intent-filter>        <!-- 监听网络变化-->        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>    </intent-filter></receiver>
  1. 动态注册
    动态注册的广播接收优先级高于静态注册,所有永远都先接收到广播
//注册if (mSystemBroadcastReceiver == null) {    mSystemBroadcastReceiver = new SystemBroadcastReceiver();}IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(mSystemBroadcastReceiver, intentFilter);//注销unregisterReceiver(mSystemBroadcastReceiver);

由于静态注册时对广播的注册时由系统自己判断的,所以我们就少了注销这一步,但在动态注册中,广播会跟随Activity的生命周期,在Activity结束前必须注销广播。
根据Activity的生命周期,我将注册是写在onStart,而注销是写在onStop的。当然,写在onResumeonPause也是可以的。

参考
[置顶] 两分钟彻底让你明白Android Activity生命周期(图文)!
Android入门:广播发送者与广播接收者

0 0
原创粉丝点击