1. 程式人生 > >從一個APP啟動另一個APP的activity的方式

從一個APP啟動另一個APP的activity的方式

從一個APP啟動另一個APP的Activity的方法

1、通過自定義action啟動

這種方式只需要在程式碼中設定一個action即可, 系統會自動過濾去找到這個action所對應的Activity

當前APP的程式碼

Intent intent = new Intent();
//這裡是採用的自定義action
intent.setAction("transBundle.app");
startActivity(intent);

待啟動APP 的activity在AndroidManifest.xml中的配置

<!- 需要配置對應的自定義action->
<activity
        android:name=".MyActivity"
        android:label="@string/app_name" 
        android:exported="true">
        <intent-filter>
            <action android:name="transBundle.app"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>

2、通過在Intent中通過指定包名和類名來查詢

直接在當前APP中寫以下程式碼,即可開啟指定APP的activity

ComponentName componetName = new ComponentName(  
            "com.poynt.weibo",  //這個是另外一個應用程式的包名  
            "com.poynt.weibo.ui.IndexActivity");   //這個引數是要啟動的Activity的全路徑名

        try {  
            Intent intent = new Intent();  
            intent.setComponent(componetName);  
            startActivity(intent);  
        } catch (Exception e) {  
            Toast.makeText(getApplicationContext(), "可以在這裡提示使用者沒有找到應用程式,或者是做其他的操作!", 0).show();  
        }

3、通過scheme啟動

其實這個方法和方法1類似, 只是說增加了scheme引數, scheme更多的用於 在網頁或者H5上來啟動我們的APP, 比如在手機官網上通過scheme可以直接開啟我們的app, 這裡我們只是從APP用scheme啟動另一個APP

當前應用的程式碼:

Uri uri = Uri.parse("app://my.test");
Intent intent = new Intent("transBundle.app", uri);
startActivity(intent);

待開啟APP的AndroidManifest配置

 <activity
        android:name=".MyActivity"
        android:label="service" 
        android:exported="true">

        <intent-filter>
            <action android:name="transBundle.app"/>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:scheme="app" android:host="my.test"/>
        </intent-filter>
    </activity>

其中app類似於http://www.baidu.com中的 http, 表示傳輸協議; my.test類似於www.baidu.com, 表示主機名