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
注册
- 静态注册
在AndroidManifest.xml文件中加入以下代码
<receiver
android:name=".broadcastreceiver.SystemBroadcastReceiver">
<intent-filter>
<!-- 监听网络变化-->
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
- 动态注册
动态注册的广播接收优先级高于静态注册,所有永远都先接收到广播
//注册
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
的。当然,写在onResume
和onPause
也是可以的。
参考
[置顶] 两分钟彻底让你明白Android Activity生命周期(图文)!
Android入门:广播发送者与广播接收者