打开浏览器,扫描某个二维码时需要启动特定的App,要实现这样的需求,我们首先需要解析HTML页面的二维码,通常解析后的内容格式为:
<a href="[scheme]://[host]/[path]?[query]">启动App</a>
//测试链接
<a href="myapp://jp.app/openwith?name=zhangsan&age=26">启动App</a>
- scheme:判别启动的App。
- host:适当记述。
- path:传值时必须的key,没有可以不传。
- query:获取值的Key和Value,没有可以不传。
首先,我们打开Android工程的AndroidManifest.xml配置文件,然后在启动页面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:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>
</intent-filter>
需要说明的是,intent-filter的内容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】这2个,不能与这次追加的内容混合在一起。因为如果加入了同一个Activity,会导致应用图标在桌面消失等问题,所以一般情况配置如下。
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" />
</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:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>
</intent-filter>
接下来,在Activity中需要取值的地方添加以下代码,可以直接写在OnCreate函数里的。
val value = intent
val action = value.action
if (Intent.ACTION_VIEW == action) {
val uri: Uri? = value.data
if (uri != null) {
val name: String? = uri.getQueryParameter("name")
val age: String? = uri.getQueryParameter("age")
... //处理业务
}
}
经过上面的处理后,就可以完成浏览器扫码打开Android/iOS App的功能了。需要注意的是,一定要用自带浏览器或者谷歌浏览器,不要用什么Uc、腾讯浏览器。
最近遇到这么一个需求: 当用户在手机浏览器中点击一个按钮时,如果手机上已经该应用程序,则直接打开,如果没有安装,则转向应用下载页面。 对于这一需求,可以使用【scheme://host:port/path or pathPrefix or pathPattern】的方式,下面的Android的开发文档:
http://developer.android.com/guide/topics/manifest/data-element.html
下面是具体的示例代码:
<a id="applink1" href="http://test.xx.com/demo/test.php">打开</a>
然后,给目标Activity增加以下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="test.xx.com "
android:path="/demo/test.php"
android:scheme="http" />
</intent-filter>
增加该filter后,该Activity就能处理 http://test.xx.com/demo/test.php。在浏览器中点击“开始”,发起对该URL的请求时,如果本机安装了这个应用,系统就会弹出一个选择,询问你想使用浏览器打开,还是使用该应用打开。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。