此文章已收入Android偶遇雜症合集(持續更新)
1、Scheme的作用,瀏覽器喚起APP
常見在手機瀏覽器打開某個網站,會有個 App 內打開的按鈕,點擊直接打開APP且跳轉到該詳情頁,用的基本都是Scheme。Scheme的基本使用如下:
<activity android:name=".MainActivity">
<!-- 需要添加下面的intent-filter配置 -->
<intent-filter>
...
<data
android:scheme="myscheme"
android:host="myhost"
android:port="1024"
android:path="/main" />
</intent-filter>
</activity>
在web頁面添加一個點擊事件跳轉:
<a href="myscheme://myhost:1024/main?key1=value1&key2=value2">open app with Uri Scheme</a>
被喚起的MainActivity中,可以在onCreate(APP未打開)和onNewIntent(APP已打開)方法中拿到跳轉的鏈接:
Intent intent = getIntent();
if (null != intent && null != intent.getData()) {
Uri uri = intent.getData();
Log.e(TAG, "uri=" +uri);
String scheme = uri.getScheme();
String host = uri.getHost();
int port = uri.getPort();
String path = uri.getPath();
String key1 = uri.getQueryParameter("key1");
String key2 = uri.getQueryParameter("key2");
Log.e(TAG, "scheme=" + scheme + ",host=" + host
+ ",port=" + port + ",path=" + path
+ ",query=" + uri.getQuery()
+ ",key1=" + key1 + ",key2=" + key2);
}
打印消息如下:
uri=myscheme://myhost:1024/main?key1=value1&key2=value2
scheme=myscheme,host=myhost,port=1024,path=/main,query=key1=value1&key2=value2,key1=value1,key2=value2
2、遇到的不生效問題原因及解決辦法
在應用中增加了Scheme,興致勃勃啟動瀏覽器按下核彈發射按鈕,結果氣氛逐漸尷尬。。。
問題出在哪呢?仔細比對了鏈接地址、AndroidManifest的配置,蒼天啊,分明是一樣的,令人崩潰!!!
然后一個偶然的機會,用了AS自帶的Android模擬器里的web test APP開啟這個鏈接,打開了一個新的頁面,顯示了設置的鏈接地址,問題的原因找到了!!!
我在web頁面中設置的鏈接為MyScheme://MyHost,點開的頁面顯示的鏈接是myshceme://myhost,神奇的事情,搜索一下發現了一篇文章,這位前輩和我遇到了一樣的情況,文章鏈接如下:
H5無法調起android app 的坑之 scheme 大小寫
最終結果就是,Scheme鏈接千萬別用大寫字母,包括scheme、host、port、path。
