Android的廣播的兩種註冊方式

2020-10-13 13:00:15

整體概述

  1. 廣播是在程式之間的,一般會由系統發起:比如電量不足
  2. 訊息到達後,BroadCastReceiver呼叫onReceive方法來實現廣播的事件

兩種方法來傳送廣播

  1. context.sendBroadcast(intent)通常會伴隨資料的傳遞intent.putExtra()
  2. context.sendOrderBroadCast(intent)這個在intent-filter中設定優先順序android:priority

兩種註冊方式

靜態註冊

在Androidmanifest.xml中註冊

  1. 定義一個myReceiver extends BroadCastReceiver 實現onReceive()方法
  2. 在Androidmanifest中註冊廣播接收器
<receiver android:name=".MyReceiver">
            <intent-filter>
                	<action android:name="com.example.broadcast" />
            </intent-filter>
</receiver>
  1. 在主activity中設定事件監聽:
    其內容為
    設定一個intent,intent設定廣播跳轉(顯式隱式),
    sendBroadCast(intent) 實現跳轉
  2. 廣播接受器中的onReceive()方法設定響應事件

動態註冊

建立一個BroadCasteReceiver的子類的範例化物件

  1. 建立子類,定義一個myReceiver extends BroadCastReceiver 實現onReceive()方法
  2. 在Androidmanifest中註冊廣播接收器
<receiver android:name=".MyReceiver">
            <intent-filter>
                	<action android:name="com.example.broadcast" />
            </intent-filter>
</receiver>
  1. 動態註冊接收器
//1.建立一個物件
final MyReceiver myReceiver2 = new MyReceiver();
//2.設定button入口,設定事件監聽
		Button btn_register = findViewById(R.id.register_broadcast);
        btn_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //新增一個Intentfilter物件,新增action屬性
                IntentFilter filter = new IntentFilter();
                filter.addAction("MyReceiver2");
                //將intentfilter與建立的子類物件關聯起來
                registerReceiver(myReceiver2,filter);
            }
});
  1. 取消註冊接收器
		Button btn_unregister = findViewById(R.id.unregister_broadcast);
        btn_unregister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                unregisterReceiver(myReceiver2);
            }
        });