Android 通過scheme連結開啟本地應用
前言:最近做一個在桌面新增快捷方式的功能,用普通常規的新增快捷方式大多數手機都建立不出來, 尤其是像小米這種只有一層的桌面,因此採取了apk式快捷方式,顧名思義就是在桌面安裝一個apk來做為快捷方式, 當點選快捷方式(apk)的時候直接開啟主應用的相應介面。
1、方式一,用Intent來啟動主應用對應介面,設定包名以及要開啟的介面的全路徑,還要在配置檔案中設定此介面exported=true:
Intent intent = new Intent();
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
通過這種方式開啟應用經測試在大多數手機上沒問題,但是在三星手機上點選快捷方式啟動應用後,再點返回鍵退出應用,這時候應用會自動重啟,結束不掉。
2、方式二, 用scheme開啟
可以在你想要開啟的應用的Activity中加scheme和host,scheme和host都可以自己取值,當然host不是必須要的,但scheme是必須要的,指定好了以後,就有了這麼一個路徑:scheme://host?key1=引數1&key2=引數2 ,我們就可以通過這個路徑來啟動應用了,一般只啟動LauncherActivity, 然後通過LauncherActivity往其他頁面中轉。
那麼我們的快捷方式的MainActivity就可以這麼寫了:
if (!PackageUtils.isInstall(context, "packageName")) { // 判斷是否安裝主應用, 如果沒安裝快捷方式會進入主頁,提示使用者下載 return; } Intent it = new Intent(Intent.ACTION_VIEW, Uri.parse("warehouse://?where_shotcut=" + BuildConfig.ShortCutName)); context.startActivity(it); ((Activity) context).finish(); // 跳轉過去後立刻自殺, 讓網倉3號起來
上面程式碼的含義是:首先判斷是否安裝了主應用, 如果沒安裝則進入快捷方式的主頁,快捷方式的主頁是一個下載連結,提示使用者下載主應用, 如果安裝了則會走到下面三句程式碼開啟主應用的目標介面, 注意我在程式碼中沒有使用host,通過:"scheme://?key=引數" 這種形式來開啟主應用。
3、用webview開啟應用
在上面第二點中講到,設定scheme和host後會產生一個連結:scheme://host?key1=引數1&key2=引數2
這時候我們在快捷方式主頁可以放一個webview, 直接用webview來開啟應用:
webview.loadUrl("scheme://host?key1=引數1&key2=引數2");
經測試第二點和第三點完美開啟應用,都不會有問題,我還反編譯了支付寶“一步支付寶付款”的apk式快捷方式,它使用的就是第三種方式。
4、開啟主應用以後,那麼主應用如何解析scheme並且如何拿到引數中的資料呢:
Intent intent = getIntent();
String scheme = intent.getScheme();
Uri uri = intent.getData();
System.out.println("scheme:"+scheme);
if (uri != null) {
String host = uri.getHost();
String dataString = intent.getDataString();
//獲得引數值
String key1 = uri.getQueryParameter("key1");
String key2 = uri.getQueryParameter("key2");
}