Android内置了许多系统级别的广播,我们可以在应用程序中通过监听广播来得到各种系统的状态信息。
我们要想收到广播,就先得有广播接收器。(就像是电台,会有许多频道,如果你要收听频道,首先就得有收音机)
/**
* 创建一个广播接收器
*/
public class MyReceiver extends BroadcastReceiver {
//1.新建一个类继承BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent) {
//2.重写onReceive方法(收到广播时的动作,比如提示,日志,做下一步操作,看个人需求)
Toast.makeText(context,"network change",Toast.LENGTH_SHORT).show();
}
}
有了广播接收器之后,接下来就是监听注册了。(有了收音机之后,可以确定要收听的频道了。)
第一种:(动态注册)在代码中注册
//在MainActivity中重写onCreate
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 1.创建IntentFilter实例
IntentFilter intentFilter = new IntentFilter();
// 2.addAction(“广播名”),要监听什么,就添加什么广播名
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//网络变化是发出的广播就是“android.net.conn.CONNECTIVITY_CHANGE”
// 3.调用registerReceiver()方法,把接收器(MyReceiver)和IntentFilter传进去
myReceiver = new MyReceiver();
registerReceiver(myReceiver, intentFilter);
// 4.动态注册的广播接收器一定要取消注册,
@Override
protected void onDestroy() {
super.onDestroy();
//onDestory中调用unregisterReceiver
unregisterReceiver(myReceiver);
}
注意:Android系统为了保证系统安全性,因此要声明权限!不然程序可能会直接崩溃!这一点很重要!!
<!-- 访问网络状态的权限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
第二种:静态注册(AndroidManifest中)
这里是开机广播
<receiver android:name=".receiver.MyReceiver">
<intent-filter>
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED">
</action>
</intent-filter>
</receiver>
最后,和动态注册一样别忘了声明权限
<!--接收开机-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
总结:动态注册灵活,但必须要程序启动后才能接收广播;静态注册可以在程序未启动的情况下就接收到广播
学习参考:
《第一行代码——Android》