1. 程式人生 > >用廣播(Broadcast)實現不同app之間的通訊

用廣播(Broadcast)實現不同app之間的通訊

Android中廣播型別可以分為2種,一種是系統的自動廣播,比說說:電量偏低,網路狀態改變,系統時間改變等等。另外一種是我們自己自定義的廣播,這種就最常見了。
系統傳送來的廣播可以被我們自己的或是第三方的app接收到,這說明了廣播是可以實現不同app之間通訊的。這也是我個人認為廣播沒有介面和使用者互動的好處。
現在寫個小demo測試廣播在不同app間通訊:即在demo 02 中,傳送廣播,試試demo 03能否接收到。
demo 02的邏輯非常簡單:就是自定義一個廣播,並點選button傳送出去:

這裡寫圖片描述

MainActivity中的程式碼:

public class MainActivity
extends Activity {
private Button mSendButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSendButton = (Button) findViewById(R.id.btn_send); mSendButton.setOnClickListener(new
OnClickListener() { @Override public void onClick(View v) { //點選的時候傳送一條廣播出去 Intent intent = new Intent("THIS_IS"); sendBroadcast(intent); } }); } }
public class MyBroadcastReciver extends BroadcastReceiver
{
@Override public void onReceive(Context context, Intent intent) { //處理收到廣播的邏輯: Toast.makeText(context, "廣播來了", 0).show(); } }

注意要在mainfest中配置下(其中我的action name起得也不規範,不過這裡這樣寫的目的是看看對action name起名有沒有什麼特殊要求。推薦格式參照官方文件即可)。

 <receiver android:name="com.huang.demo02.MyBroadcastReciver">
            <intent-filter >
                <action android:name="THIS_IS"/>
            </intent-filter>
        </receiver>

當點選button之後,可以收到發來的廣播,說明,廣播可以實現app內部之間的通訊。

現在來看廣播在不同app之間的通訊:

定義一個Demo 03, 註冊一個廣播接收者, 程式碼如下:

public class SecondBroadcaseReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //處理手動廣播的邏輯
        Toast.makeText(context, "收到上個的廣播", 0).show();

    }

}

配置檔案:

<receiver android:name="com.huang.demo03.SecondBroadcaseReceiver">
            <intent-filter >
                <action android:name="THIS_IS"/>
            </intent-filter>

        </receiver>

當點選第二個app的時候:
這裡寫圖片描述

這裡吐司顯示就說明了Demo 02 在傳送廣播,Demo 03 收到廣播之後吐司提示:收到了上個的廣播,實現了Demo 02 和 Demo 03的通訊。