Android

Android四大组件之BroadcastReceiver

2019-04-16  本文已影响15人  MoonJoy

概述

该组件本质上是一种全局的监听器,用于监听系统全局的广播消息。

应用场景

注册方式

        <receiver
            <!--继承BroadcastReceiver子类的类名-->
            android:name=".MyReceiver"
            <!--是否启用此broadcastReceiver-->
            android:enabled="true"
            <!--此broadcastReceiver能否接收其它App发出的广播,对于有intent-filter情况下默认值为true-->
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
        </receiver>
     MyReceiver receiver = new MyReceiver();

     IntentFilter intentFilter = new IntentFilter();
     intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);
     //IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");

     registerReceiver(receiver , intentFilter);
     //unregisterReceiver(receiver);

动态注册最好在Activity的onResume()注册,onPause()注销。

区别

注意:Android 8.0对广播进行了限制。因此当使用静态注册失效时,可以改成动态注册方式。

Android 8.0
来源:https://developer.android.google.cn/about/versions/oreo/background

广播类型:

Intent intent = new Intent();
intent.setAction("android.intent.action.BOOT_COMPLETED");
sendBroadcast(intent);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        LocalBroadcastManager manager = LocalBroadcastManager.getInstance(this);
        localReceiver = new LocalReceiver();
        IntentFilter filter = new IntentFilter(LOCAL_ACTION);
        manager.registerReceiver(localReceiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        localBroadcastManager.unregisterReceiver(localReceiver);
    }
    
    public void sendLocalBroadcast(View view) {
        Intent intent = new Intent(LOCAL_ACTION);
        localBroadcastManager.sendBroadcast(intent);
    }

Android的大量系统事件都会对外发送标准广播。以下是常见的广播Action:

上一篇 下一篇

猜你喜欢

热点阅读