組件之BroadcastReceiver詳解

一、BroadcastReceiver解析

(1)廣播注冊使用

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String name = intent.getStringExtra("name");
    }
}

(2)動態注冊廣播

public class MainActivity extends AppCompatActivity {

    private MyBroadcastReceiver myBroadcastReceiver;
    private IntentFilter intentFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myBroadcastReceiver = new MyBroadcastReceiver();
        intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.MY_BROADCAST_RECEIVER");
        registerReceiver(myBroadcastReceiver, intentFilter);//注冊廣播
    }

    //發送廣播
    private void sendOut(){
        Intent intent = new Intent("android.intent.action.MY_BROADCAST_RECEIVER");
        intent.putExtra("name","name");
        sendBroadcast(intent);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myBroadcastReceiver);//注解廣播
    }
}

(3)在配置文件中靜態注冊廣播

<receiver android:name=".類名">
    <intent-filter>
        <action android:name="android.intent.action.MY_BROADCAST_RECEIVER"/>
    </intent-filter>
</receiver>

特點:動態注冊廣播接收器特點是當用來注冊的Activity關掉后,廣播也就失效了。靜態注冊無需擔憂廣播接收器是否被關閉,只要設備是開啟狀態,廣播接收器也是打開著的

(4)其他廣播

  • 有序廣播:將sendBroadcast改成sendOrderedBroadcast。priority接收廣播的優先級
  • 系統廣播:
    屏幕被關閉:Intent.ACTION_SCREEN_OFF
    屏幕被打開:Intent.ACTION_SCREEN_ON
    系統啟動完成:Intent.ACTION_BOOT_COMPLETED
    網絡變化:android.net.conn.CONNECTIVITY_CHANGE
    充電時或電量發生變化:Intent.ACTION_BATTERY_CHANGED
  • 本地廣播:只有動態注冊的廣播才能使用,主要使用了一個LocalBroadcastManager來對廣播進行管理,并提供了相應的發送廣播和注冊廣播接收器的方法
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
//注冊廣播
localBroadcastManager.registerReceiver(myBroadcastReceiver,intentFilter);
//發送廣播
localBroadcastManager.sendBroadcast(intent);
//反注冊廣播
localBroadcastManager.unregisterReceiver(myBroadcastReceiver);
  • 粘性廣播:.sendStickyBroadcast發送粘性廣播,廣播會一直滯留,當有匹配該廣播的接收器被注冊后,該接收器就會收到此條廣播。sendStickyBroadcast只保留最后一條廣播,并且一直保留。如果只想處理一遍該廣播,可通過removeStickyBroadcast來實現。
    BroadcastReceiver源碼解析
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容