Android配置Scheme使用浏览器唤起APP的方式,以及不生效问题解决

此文章已收入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。

posted @ 2020-11-11 19:49  coder-ice  阅读(1970)  评论(0编辑  收藏  举报