※ 在A APP按下按鈕後,開啟B APP
※ deeplink
在 A APP 做一個按鈕
加入以下程式
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String uri = "OpenAnotherApp://star_home/hero?id=94&type=super"; // 目標
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN); // 改 Intent.ACTION_VIEW 可以開啟別的APP的某個Activity
intent.addCategory(Intent.CATEGORY_BROWSABLE); // 預設不要改
intent.addCategory(Intent.CATEGORY_DEFAULT); // 預設不要改
intent.setData(Uri.parse(uri));
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
}
}
});
其中
uri 是自訂義
結構長這樣
[scheme] :// [host][path] ? [QueryParameter] = {xxx} & [QureyParameter] = {xxx}
所以以這段 uri 為例
OpenAnotherApp://star_home/hero?id=94&type=super
→ scheme = OpemAnotherApp
→ host = star_home
→ path = /hero
→ 第一個 QureyParameter 的名字 = id , 值為 94
→ 第二個 QureyParameter 的名字 = type , 值為 super
從來沒接觸過的 一定完全搞不清楚上面是在幹嘛
沒關係
我們先接著繼續做
用例子來說明比較清楚
接著 建立第二個 APP
打開他的 AndroidManifest.xml
剛建立好的專案,初始會長這樣
我們在 <activity> </activity> 內加入以下程式碼
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="star_home"
android:path="/hero"
android:scheme="OpenAnotherApp" />
</intent-filter>
變成這樣
此時你可以注意到 <data> 標籤內的值
scheme =OpenAnotherApp
host =star_home
path =/hero
剛好就是我們在第一個APP裡 uri 設的值 ( uri = "OpenAnotherApp://star_home/hero?id=94&type=super" )
其實,
做到這個步驟
我們已經把兩個APP連結起來了
此時
把兩個APP都Build在你的手機裡
打開 A APP
按下按鈕後
就會開啟另外一個APP了
至於剛剛 uri 內的 後半段 id=94&type=super 是幹嘛的呢?
他是用來讓你從A APP夾帶參數帶到B APP用的
怎麼從 B APP 取得這兩個值呢?
我們在B的 MainActivity.java 內加入以下程式碼
Uri uri = getIntent().getData();
String getFromUri_id = uri.getQueryParameter("id");
String getFromUri_type = uri.getQueryParameter("type");
((TextView) findViewById(R.id.text_id)).setText(getFromUri_id);
((TextView) findViewById(R.id.text_type)).setText(getFromUri_type);
如圖
其中
我們可以看到
uri.getQueryParameter("id")
和
uri.getQueryParameter("type")
這兩個就是取出
參數名稱為 "id"
和
參數名稱為 "type"
的值
「
uri = "OpenAnotherApp://star_home/hero?id=94&type=super"
→ 第一個 QureyParameter 的名字 = id , 值為 94
→ 第二個 QureyParameter 的名字 = type , 值為 super
」
此時從A App 按下按鈕後
打開的 B App 就會長這樣
如此就大功告成拉!!!
註:
uri.getScheme(); uri.getHost(); uri.getPath();
有興趣的朋友還可以再多試這三行
其實功能就跟方法名稱一樣
取出 uri 的 " scheme " , " host " 和 " path "
以 uri = "OpenAnotherApp://star_home/hero?id=94&type=super" 為例
uri.getScheme() 可以得到OpenAnotherApp
uri.getHost() 可以得到star_home
uri.getPath() 可以得到/hero
寫得嚴謹一點,其實可以多加一點判斷
像這樣
if ( uri.getScheme().equals("OpenAnotherApp") && uri.getHost().equals("star_home") && uri.getPath().equals("/hero") )