Android9.0 BroadcastReceiver案例分析附源码

Android BroadcastReceiver用于异步进程间通信,类似于发布-订阅的设计模式,不像Activity那样有界面,它是一个Android组件,用于向系统或者应用程序广播消息,这种广播消息指的是事件或者intent(意图)。具体例子像系统的电源容量低通知,下载通知等。
常用的系统intent有:
android.intent.action.BATTERY_CHANGED
android.intent.action.BATTERY_LOW
android.intent.action.POWER_CONNECTED
android.intent.action.POWER_DISCONNECTED
android.intent.action.BOOT_COMPLETED
android.intent.action.CALL
android.intent.action.DATE_CHANGED
android.intent.action.REBOOT
android.intent.action.CONNECTIVITY_CHANGE
android.intent.action.BUG_REPORT
android.intent.action.CALL_BUTTON

Android中大致有两种广播消息:
1.有序广播
2.无序广播

有序广播是同步型广播,按序发送广播消息,序号按照android:priority 属性排列。相同优先级的广播消息将没有先后之分。
无序广播则是异步型广播,随机发送广播消息,使用Context:sendBroadcast发送广播消息。

要实现BroadcastReceiver,首先需要注册这个receiver。
有两种方式:
1.通过Context 注册

<receiver android:name="DataReceiver" >
             <intent-filter>
                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
             </intent-filter>
</receiver>

2.通过Manifest注册

IntentFilter filter = new IntentFilter();
intentFilter.addAction(getPackageName()+"android.net.conn.CONNECTIVITY_CHANGE");
MyReceiver myReceiver = new MyReceiver();
registerReceiver(myReceiver, filter);

注意:Android8以上需要在代码中注册receiver才行。

具体细节请参考完整案例:
开发环境:Android Studio4.0
TestBroadcastReceiver.zip:

MyBroadcastReceiver receiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IntentFilter filter = new IntentFilter("com.funny.CUSTOM_INTENT");
        receiver = new MyBroadcastReceiver();
        registerReceiver(receiver, filter);
    }

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章