參考大神的理解 :http://www.cnblogs.com/lwbqqyumidi/p/4168017.html
廣播 BroadcastReceiver 用於接收程序所發出的Broadcast Intent, 也可以說他是一個全局監聽器 監聽所有程序的廣播消息。
廣播分爲 有序廣播 NormalBroadcast 普通廣播
優點 效率高,但是接收者不能講結果傳遞給下一個接受者 無法終止
OrderedBroadcast 有序廣播
優點 可以將數據接着傳遞給下一個接收者 ,下一個接收者 不僅可以得到廣播的數據 還能得到上一個接受者存入的數據 Bundle bundle=getResultExtras(true)可以得到上一個接受者存入的數據;可以設置優先級 讓誰先得到廣播的消息
但是 如果 前一個接受者停止了廣播 下一個接受者就收不到了 調用abortBroadcast()終止廣播
System Broadcast: 系統廣播
Android系統中內置了多個系統廣播,只要涉及到手機的基本操作,基本上都會發出相應的系統廣播。如:開啓啓動,網絡狀態改變,拍照,屏幕關閉與開啓,點亮不足等等。每個系統廣播都具有特定的intent-filter,其中主要包括具體的action,系統廣播發出後,將被相應的BroadcastReceiver接收。系統廣播在系統內部當特定事件發生時,有系統自動發出。
簡單的廣播實現
廣播 註冊方式有兩種 寫法 其一: 靜態廣播
1:先創建一個類繼承抽象類 BroadcastReceiver 並實現抽象方法OnReceive
其中 同過 參數 intent 可以得到發來的廣播 通俗的講就是得到傳來的值
public class MyBroadcastreceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { String str=intent.getStringExtra("jing"); Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); Log.d("MyBroadcastreceiver", str); } }
2:靜態廣播 需要在配置清單中 配置
注意 receiver的名字 是包名加類名 action 的名字 可以隨意寫 但要與Intent設置的一致
<receiver android:name=".broadcastreceivers.MyBroadcastreceiver"> <intent-filter> <action android:name="jingtai"></action> </intent-filter> </receiver>3:發廣播
Intent intent=new Intent(); intent.putExtra("jing","hellow! jingtaiBroadcastreceiver"); intent.setAction("jingtai"); sendBroadcast(intent);以上就是簡單的 靜態廣播了
其二:動態廣播
1i: 這裏 需要用到 IntetnFilter
設置action 名稱 需要與 Intent設置的一致 同樣需要寫個類 繼承 BroadcastReceiver
然後實現抽象方法 OnReceive 創建一個實例化對象 註冊廣播
IntentFilter intentFilter=new IntentFilter(); intentFilter.addAction("dt"); my = new MyBroadcastreceiver(); registerReceiver(my,intentFilter);
2:Intent 設置 主要 action要與 IntentFilter 設置的一致
Intent intenet=new Intent(); intenet.putExtra("dongtai","heloow!我是動態廣播哦"); intenet.setAction("dt"); sendBroadcast(intenet);3:取值 同樣 與靜態相同
String str=intent.getStringExtra("dongtai"); Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); Log.d("MyBroadcastreceiver", str);4:取消廣播
unregisterReceiver(my);