imcys.com
遵从中二的召唤,来吧少年!

【Android】利用Scheme在网页唤起APP

前言

相信你在看此文之前已经发现有不少APP可以在网页被唤起,比如我们所见的QQ,我的世界,拼多多,支付宝,微信等程序,可以被外部网页拉起响应。没错,我就是因为这个才做这个文章,因为我也在自己的APP里实现了它。因为我也刚学Android,许多东西不懂,如果说错了欢迎指正,有缺失欢迎补全。

教程

Scheme

Android中的Scheme是一种页面跳转协议,和网站通过URL的形式访问一样,APP同样可以通过这种方式进行跳转,它可以很方便的满足我们在一些场景中的需求。

有了上面的解释,想必大家已经迫不及待的为自己的APP加入这个功能,因为它的应用场景较为广,来看看我们应该如何配置这一个功能。

AndroidManifest.xml

我们需要在这里配置一下intent-filter,这样我们可以实现一个过滤器,下面以我的程序BILIBILI AS的配置方法来作为例子。

<activity
            android:name=".as.VideoAsActivity"
            android:configChanges="orientation|screenSize|keyboardHidden"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="text/*"/>
            </intent-filter>
            <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="imcys"
                    android:path="/main"
                    android:port="2333"
                    android:scheme="bilibilias"/>
            </intent-filter>
        </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="imcys"
                    android:path="/main"
                    android:port="2333"
                    android:scheme="bilibilias"/>
            </intent-filter>

intent-filter里的action,category是必须要带的,而data可以帮助我们过滤网页中的启动链接。如果按上方法写,那么你的链接应该是下面的

bilibilias://imcys:2333/main

我们不难发现,上面data中配置的属性和链接是对应的,通过查询网页,我发现data可以配置下面的东西。

<data android:host=""
      android:mimeType=""
      android:path=""
      android:pathPattern=""
      android:pathPrefix=""
      android:port=""
      android:scheme=""
      android:ssp=""
      android:sspPattern=""
      android:sspPrefix=""/>

这个就需要你自己去摸索了

Activity

接下来我们写Java文件,获取在网页传回的内容

if (null != intent && null != intent.getData()) {
            // uri 就相当于 web 页面中的链接
            //下面是获取刚刚data的配置
            Uri uri = intent.getData();
            String scheme = uri.getScheme();
            String host = uri.getHost();
            int port = uri.getPort();
            String path = uri.getPath();
            //video相当于在链接当中的键(key)
            String bvid = uri.getQueryParameter("video");
        }

如果我们的链接是这样的

bilibilias://imcys:2333/main?video=av10086

那么按上代码bvid就为av10086

我们在网页这样写,就可以轻松跳转APP的activity

<a href="bilibilias://imcys:2333/main?video=av10086">跳转到AV10086</a>

尾巴

不知道你有没有看懂,如果没有看懂可以去看看网上其他的教程。

下面我们来测试这一成果,点击下面按钮,跳转BILIBILI AS,当然这需要1.0.8版本,过两天我可能在这里发布链接。

萌新杰少

文章作者

I im CYS,一个热爱二次元的高中生开发者

发表评论

textsms
account_circle
email

萌新杰少の秘密基地

【Android】利用Scheme在网页唤起APP
相信你在看此文之前已经发现有不少APP可以在网页被唤起,比如我们所见的QQ,我的世界,拼多多,支付宝,微信等程序,可以被外部网页拉起响应。
扫描二维码继续阅读
2020-12-27