日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中广播接收者BroadcastReceiver详解

發布時間:2025/3/21 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中广播接收者BroadcastReceiver详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 接收系統的廣播步驟

?

(1)??新建一個類繼承BroadcastReceiver

?

以監聽sd卡狀態的廣播接收者為例

1 public class SdCardBroadcastReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 String action = intent.getAction(); 6 if("android.intent.action.MEDIA_MOUNTED".equals(action)){ 7 System.out.println("sd卡已掛載"); 8 }else if("android.intent.action.MEDIA_UNMOUNTED".equals(action)){ 9 System.out.println("sd卡已卸載"); 10 } 11 } 12 13 }

?

形象一點的比喻, 這一步相當于買了個收音機

?

(2)?在清單文件中注冊

?

1 <!-- 相當于裝電池 --> 2 <receiver android:name="com.example.sdbroadcast.SdCardBroadcastReceiver"> 3 <!-- 相當于調頻道 --> 4 <intent-filter> 5 <action android:name="android.intent.action.MEDIA_MOUNTED"/> 6 <action android:name="android.intent.action.MEDIA_UNMOUNTED"/> 7 <data android:scheme="file"/> 8 </intent-filter> 9 </receiver>

?

這一步相當于裝電池

?

(3)??在清單文件中添加意圖過濾器,action里寫監聽的內容

?

1 <!-- 相當于調頻道 --> 2 <intent-filter> 3 <action android:name="android.intent.action.MEDIA_MOUNTED"/> 4 <action android:name="android.intent.action.MEDIA_UNMOUNTED"/> 5 <data android:scheme="file"/> 6 </intent-filter>

?

這一步相當于調頻道了

?

2. 發送自定義的無序廣播

?

(1) 發送廣播

?

1 public void startBroadcast(View view){ 2 //開啟廣播 3 //創建一個意圖對象 4 Intent intent = new Intent(); 5 //指定發送廣播的頻道 6 intent.setAction("com.example.BROADCAST"); 7 //發送廣播的數據 8 intent.putExtra("key", "發送無序廣播,順便傳遞的數據"); 9 //發送 10 sendBroadcast(intent); 11 }

?

(2) 接收廣播

?

新建一個類,繼承BroadcastReceiver

?

1 public class UnorderedReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 String action = intent.getAction(); 6 7 String data = intent.getStringExtra("key"); 8 9 System.out.println("接受到了廣播,action:"+ action +",data:"+data); 10 11 //接受到了廣播,action:com.example.BROADCAST,data:發送無序廣播,順便傳遞的數據 12 } 13 14 }

?

記得在清單文件中進行注冊

?

1 <receiver android:name="com.example.selfreceiver.UnorderedReceiver"> 2 <intent-filter> 3 <action android:name="com.example.BROADCAST"/> 4 </intent-filter> 5 </receiver>

?

打印出的結果:

?

?

3. 發送自定義的有序廣播

(1) 發送廣播

1 // 發送有序廣播 2 public void sendOrderedBroad(View view) { 3 Intent intent = new Intent(); 4 intent.setAction("com.example.ORDERED"); 5 // 發送無序廣播 6 sendOrderedBroadcast(intent,//意圖動作,指定action動作 7 null, //receiverPermission,接收這條廣播具備什么權限 8 new FinalReceiver(),//resultReceiver,最終的廣播接受者,廣播一定會傳給他 9 null, //scheduler,handler對象處理廣播的分發 10 0,//initialCode,初始代碼 11 "每人發10斤大米,不得有誤!", //initialData,初始數據 12 null//initialExtras,額外的數據,如果覺得初始數據不夠,可以通過bundle來指定其他數據 13 ); 14 }

?

在上面的代碼中,廣播發送者發送了一條廣播:"每人發10斤大米,不得有誤!"

?

(2) 接收廣播

?

新建一個類, 繼承BroadcastReceiver,并在清單文件中進行注冊

以下是所有的廣播接收者在清單文件中的注冊

?

?

權限從-1000 至 1000

?

1) 權限高的廣播接收者可以修改廣播,甚至可以終止廣播

?

權限高的廣播接收者1:

?

1 public class ShengReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 6 //獲取廣播的數據 7 String data = getResultData(); 8 9 //修改 10 setResultData("中央下達福利,每人5斤大米"); 11 12 System.out.println("省政府收到指示, data : "+data); 13 } 14 15 }

?

在這里, 這個接收者修改廣播為: "中央下達福利,每人5斤大米"

?

權限低的廣播接收者

?

1 public class PeopleReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 //獲取廣播的數據 6 String data = getResultData(); 7 System.out.println("老百姓收到福利,感謝黨, data : "+data); 8 } 9 10 }

?

這樣,在控制臺打印出來的信息為:

?

?

權限低的接收者 接收到的廣播就是修改后的了

?

2) 終止廣播

?

權限高的廣播接收者:

?

1 public class ShengReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 6 //獲取廣播的數據 7 String data = getResultData(); 8 9 //也可以終止廣播,權限小的接收者就接收不到廣播了 10 abortBroadcast(); 11 12 System.out.println("省政府收到指示, data : "+data); 13 } 14 15 }

?

控制臺打印:

?

權限小的就接收不到廣播了....

?

(3)?resultReceiver

?

可以在廣播發送者的應用中建一個resultReceiver, 用于接收最終到達的廣播,

無論廣播是否終止,都會被resultReceiver接收

?

1 public class FinalReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 String resultData = getResultData(); 6 System.out.println("人民收到的最終福利是: "+ resultData); 7 } 8 9 }

?

控制臺打印信息:

?

(終止廣播后):

(修改廣播后):

?

4. 補充:

有序廣播和無序廣播的區別:

?

有序廣播:發送方發出后,幾乎同時到達多個廣播接收者處,某個接收者不能接收到廣播后進行一番處理后傳給下一個接收者,并且無法終止廣播繼續傳播;Context.sendBroadcast(intent);

有序廣播:廣播接收者需要提前設置優先級,優先級高的先接收到廣播,優先級數值為-1000~1000,在AndroidManifest.xml的<intent-filter android:priority="xxx">設置;比如存在3個廣播接收者A、B、C,優先級A>B>C,因此A最先收到廣播,當A收到廣播后,可以向廣播中添加一些數據給下一個接收者(intent.putExtra()),或者終止廣播(abortBroadcast());Context.sendOrderedBroadcast(intent);

?

轉載于:https://www.cnblogs.com/wanghaoyuhappy/p/5292733.html

總結

以上是生活随笔為你收集整理的Android中广播接收者BroadcastReceiver详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。