《Android》『呼叫外部 App』- 透過 sendBroadcast 執行外部 App 的基本方法
《簡單介紹》
在開發 Android 專案程式的過稱中,有時候會需要在特定的時候,呼叫其他應用程式來執行所需的功能,這邊來介紹一下該如何透過 sendBroadcast 的方式,從一支程式開啟另一支程式。
《用法介紹》
前面我們已經介紹過如何透過 startActivity 從 A 程式開啟 B 程式,這邊我們介紹另一種方式,也就是透過廣播接收器來完成這個動作,該怎麼做呢?首先,我們必須在 B 程式中,建立一個繼承自 BroadcastReceiver 的類別當作廣播接收器,接著註冊一個自訂的 Action,之後就可以利用這個 Action,串連起 A、B 程式間的廣播接收機制。
以下直接透過程式碼片段,說明實作的方式 –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.example.serverapp; import ... public class Receiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("com.xylon.startServerAppByBroadcast")){ . . . } } } |
Receiver.java
我們在 B 程式中,自訂了一個繼承自 BroadcastReceiver 的 Receiver 類別,並在其中過濾我們將要自訂的 Action 字串,以用來執行我們想做的動作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.serverapp"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".Receiver"> <intent-filter> <action android:name="com.xylon.startServerAppByBroadcast"/> </intent-filter> </receiver> </application> </manifest> |
於 AndroidManifest.xml 中註冊廣播接收器
接著將剛剛自訂的 Action 字串,於 AndroidManifest.xml 中註冊,如此一來,當 A 程式送出帶有此 Action 字串的廣播時,就會喚醒 B 程式並執行 Receiver 類別中的 onReceive() 方法。
1 2 3 4 5 |
... Intent it = new Intent("com.xylon.startServerAppByBroadcast"); //設定廣播 action 識別碼 it.putExtra("sender_name", "Xavier"); //設定廣播夾帶參數 sendBroadcast(it); //發送廣播訊息 ... |
由 A 啟動 B 之程式碼
最後,在 A 程式中,只要送出帶有剛剛所自訂的 Action 之廣播時,就會喚醒 B 程式並執行 Receiver 類別中的 onReceive() 方法,透過 intent 我們甚至還可以將一些 B 可能需要的資料由 A 傳遞給 B。
臉書留言
一般留言