《Android》『呼叫外部 App』- 透過 startActivity 執行外部 App 的基本方法
《簡單介紹》
在開發 Android 專案程式的過稱中,有時候會需要在特定的時候,呼叫其他應用程式來執行所需的功能,這邊來介紹一下該如何透過 startActivity 的方式,從一支程式開啟另一支程式。
《用法介紹》
要實作從 A 程式開啟 B 程式,有兩種方式,一種是在 B 程式的 AndroidManifest.xml 中設定一個自訂的 action name,再在 A 程式中將該 action name 透過 intent 的 setAction() 方法代入,並 startActivity 該 Intent 即可。
另一種方式,則是當我們已知 B 程式的 Package Name 與要啟動的 Class Name,則直接在 A 程式中,將 Package Name 與 Class Name 透過 intent 的 setComponent() 方法代入,並 startActivity 該 Intent 即可。
以下直接以程式碼片段的方式,來說明兩種方法的實作方式。
1. 透過 action name 呼叫另一支程式
首先我們在 Android Studio 專案中同時建置兩個應用程式,先建立 A 程式,在 A 程式專案點右鍵選 Module,接著選 Phone & Tablet Module ,就可以在此專案中建立另一個應用程式,接著,我們在 B 程式的 AndroidManifest.xml 中加入了一個 intent-filter,並且在其中自訂了一個 action 的字串,並且將其 category 設定為 default,相關程式碼如下 –
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 |
<?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> <intent-filter> <action android:name="com.xylon.startServerApp" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest> |
AndroidManifest.xml
接著,我們就可以在 A 應用程式的程式碼中,直接透過以下程式碼,來啟動 B 程式。
1 2 3 4 5 |
... Intent activityIntent = new Intent(); activityIntent.setAction("com.xylon.startServerApp");//自訂的 action name startActivity(activityIntent); ... |
由 A 啟動 B 之程式碼
2. 透過 Package Name、Class Name 呼叫另一支程式
若是透過 Package Name 與 Class Name 的方式,我們可以直接由 A 啟動 B 而不需要額外註冊,由 A 啟動 B 之程式碼如下 –
1 2 3 4 5 |
... Intent activityIntent = new Intent(); activityIntent.setComponent(new ComponentName("com.example.serverapp","com.example.serverapp.MainActivity" )); startActivity(activityIntent); ... |
由 A 啟動 B 之程式碼
當我們已知 B 程式的 Package Name 與要啟動的 Class Name 時,可以直接在 A 程式中,將 Package Name 與 Class Name 透過 intent 的 setComponent() 方法代入,並 startActivity 該 Intent 來啟動 B 程式。
臉書留言
一般留言