Android四大组件之广播接收器——接收系统广播

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》

猜你喜欢

转载自blog.csdn.net/weixin_36027342/article/details/79884144