Android 四大組件之BroadcastReceiver 廣播

參考大神的理解 :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);


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