一、跨程式發送廣播 廣播是一種可以跨進程的通信方式; 我們來寫一個發送有序廣播的項目 首先先建立一個BroadcastTest3項目 然後寫一個接收廣播的類,繼承自BroadcastReceiver package com.example.broadcasttest3; import android ...
一、跨程式發送廣播
- 廣播是一種可以跨進程的通信方式;
- 我們來寫一個發送有序廣播的項目
- 首先先建立一個BroadcastTest3項目
- 然後寫一個接收廣播的類,繼承自BroadcastReceiver
package com.example.broadcasttest3; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class AnotherBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context,Intent intend) { Toast.makeText(context, "receive in AnotherBroadcastReceiver",Toast.LENGTH_SHORT).show(); } }
- 然後在AndroidManifest.xml文件中註冊該類
<application ...................省略代碼................... <receiver android:name=".AnotherBroadcastReceiver"> <intent-filter> <action android:name="com.example.broadcasttest.MY_BROADCAST" /> </intent-filter> </receiver> </application>
- 可以看到該類接受的是
com.example.broadcasttest.MY_BROADCAST
的廣播 - 接下來我們安裝好這個項目2
- 我們回到項目1,點擊
send broadcast
按鈕,會出現
- 然後緊接著會出現另一個項目的提示
- 這就證明瞭我們應用程式發出的廣播是可以被其他程式所接收到的。
註意:
com.example.broadcasttest.MY_BROADCAST
的廣播已經在第一個項目的Androidmanifest.xml
文件中定義好了。
二、發送有序廣播
- 我們聚焦回項目1
- 接下來我們發送有序廣播,首先先修改觸發廣播的方法,在
MainActivity.java
中
//將sendBroadcast(intent);修改為如下有序廣播的方法 sendOrderedBroadcast(intent,null);
- 該方法首先傳入intent,第二個參數是與許可權相關的字元串,這裡傳入null即可
- 然後給我們的項目1的
AndroidManifest.xml
中文件添加優先順序,代表項目1,在項目2之前獲得該廣播
<receiver android:name=".MyBroadcastReceiver"> <intent-filter android:priority="100"> <action android:name="com.example.broadcasttest.MY_BROADCAST"/> </intent-filter> </receiver>
- 其實添加了一個屬性而已
android:priority="100"
- 當然這個項目1,也可以截斷這個廣播不讓它繼續傳播,修改接收類
MyBroadcastReceiver
public void onReceive(Context context,Intent intent) { Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show(); abortBroadcast(); }
- 也就是多加了一個截斷方法而已
三、使用本地廣播
- 我們上面介紹的都是全局廣播,所有程式都可以接收,所以會有安全性問題,同時也容易形成垃圾廣播
- android給我們提供了只在本程式里發送接收的廣播,使用
LocalBroadcastManager
來管理 - 我們下次連載再進行修改代碼。
四、源碼:
- BroadcastTest2
- BroadcastTest3
- https://github.com/ruigege66/Android/tree/master/BroadcastTest2
- https://github.com/ruigege66/Android/tree/master/BroadcastTest3
- CSDN:https://blog.csdn.net/weixin_44630050
- 博客園:https://www.cnblogs.com/ruigege0000/
- 歡迎關註微信公眾號:傅里葉變換,個人賬號,僅用於技術交流,後臺回覆“禮包”獲取Java大數據學習視頻禮包