標籤:
什麼是BroadcastReceiver
BroadcastReceiver是Android體系的四大組件之一,本質上是一種全域的監聽器,用於監聽系統全域的廣播訊息,正式因為其本質為全域監聽,因此可以非常方便的實現系統中不同組件之間的通訊。也方便我們自己的app針對系統開機、電量低等廣播做出相應反映。同時我們也可以自己發送廣播,來實現不同組件之間的通訊
系統接收簡訊廣播,然後彈出Toast:
package cn.lixyz.broadcastreceiver;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.util.Log;import android.widget.Toast;public class MainActivity extends Activity { private IntentFilter filter; private SMSReceiver sms; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); sms = new SMSReceiver(); registerReceiver(sms, filter); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); unregisterReceiver(sms); } class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "有簡訊", Toast.LENGTH_SHORT).show(); Log.d("TTTT", "~~~~~~~"); } }}MainActivity.java
還需要添加許可權:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
運行結果:
Android的大量系統事件都會對外發送廣播,下面是常見的廣播常量:
ACTION_TIME_CHANGED 系統時間被改變
ACTION_DATE_CHANGED 系統日期被改變
ACTION_TIMEZONE_CHANGED 系統時區被改變
ACTION_BOOT_COMPLETED 系統啟動完成
ACTION_PACKAGE_ADDED 系統添加包
ACTION_PACKAGE_CHANGED 系統的包改變
ACTION_PACKAGE_REMOVED 系統的包被刪除
ACTION_PACKAGE_RESTARTED 系統的包被重啟
ACTION_PACKAGE_DATA_CLEARED 系統的包資料被清空
ACTION_BATTERY_CHANGED 電池電量改變
ACTION_BATTERY_LOW 電池電量低
ACTION_POWER_CONNECTED 系統串連電源
ACTION_POWER_DISCONNECTED 系統與電源斷開
ACTION_SHUTDOWN 系統被關閉
Broadcast的分類
廣播分為標準廣播和有序廣播
標準廣播是一種完全非同步執行的廣播,在廣播發出之後,所有的廣播接收器幾乎在同一時間都會接收到這條廣播,沒有順序可言,這種廣播效率高,但無法截斷。
有序廣播則是一種同步執行的廣播,在廣播發出後,同一時刻只會有一個廣播接收器能夠接收到這條廣播訊息,當這個廣播接收器中的邏輯執行完畢之後,廣播才會繼續傳遞。優先順序高的廣播接收器可以先接收到,並且可以截斷廣播,廣播被截斷後,後面的廣播接收器就無法再接收到了。
Android筆記(六十)Android總結:四大組件——BroadcastReceiver篇