前几天总结了在app中调用其他应用的方法,这一次收集了在网页Html中调Android应用的解决方案。总的思路是,通过url连接调用app中有对应标记的Activity,通过url的参数传递数据,通过设置超时时间来判断是否安装了app.
一、Html中打开app
首先在AndroidManifest.xml中配置被打开的Activity
<activity android:name = ".MainActivity" ><intent-filter>//程序主入口(必须)<action android:name = "android.intent.action.MAIN" />//设置桌面图标<category android:name = "android.intent.category.LAUNCHER" />//动作:和 VIEW_ACTION 相同,是在数据上执行的标准动作。(必须)<action android:name = "android.intent.action.VIEW" />//类别:如果 activity 是对数据执行确省动作(点击, center press)的一个选项,需要设置这个类别。(必须)<category android:name = "android.intent.category.DEFAULT" />//类别:能够被浏览器安全使用的 activities 必须支持这个类别。(必须)<category android:name = "android.intent.category.BROWSABLE" />//识别标示<dataandroid:host = "wankun.com"android:scheme = "hansheng" /></intent-filter></activity>
其中
1、android.intent.action.MAIN 不能忘记掉,是设置该Activity可以作为程序入口单独打开的标示,不然会报错
2、识别标示 中host是主机地址,scheme可以理解为意图协议。所以对应的网页中的路径是“ hansheng://wankun.com/”
所以html这样写就可以调用起app中对应的Activity了
<!DOCTYPE html><html><head lang = "en" ><meta charset = "UTF-8" ><title> Html中打开app </title></head><body><a href = "hansheng://wankun.com/" > 打开app </a><br/></body></html>
二、传递参数
网页中传递参数的方式 和普通的url传参相似,直接加载url之后,如 :hansheng://wankun.com/
?param1=0¶m2=aaa
对已的Activity中做参数接收,和普通的参数接收相似。
Uri uri = getIntent (). getData ();String test1 = uri . getQueryParameter ( "param1" );String test2 = uri . getQueryParameter ( "param2" );Log . e ( ">>>>>>>>>" , test1 + test2 );
至于复杂参数的传递,可以用json 对象来处理,
三、如果没有安装该app怎么办
html中其实是无法判断应用是否安装,除非在webview中通过js bridge,这里通过一种方式达到此目的。
用
window.setTimeout 设置。即在html中设置
延迟动作
,在延时时间之内没有得到app的响应,说明没有安装app,
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Html中打开app</title>
</head>
<body>
<a id="openApp">打开app</a><br/>
<script type="text/javascript">
document.getElementById('openApp').onclick = function(e){
// 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP
var ifr = document.createElement('iframe');
ifr.src = 'hansheng://wankun.com/?param1=0¶m2=aaa';
ifr.style.display = 'none';
document.body.appendChild(ifr);
window.setTimeout(function(){
//有人说如果跳转成功,下面的方法不会执行,但是在手机浏览器上测试,不管跳转是否成功,下面的方法还是会执行,哭
location.href="https://www.baidu.com/";//如果超时就跳转到app下载页
document.body.removeChild(ifr);
},500)
}
</script>
</body>
</html>
这里并不能真正实现判断是否有没有安装app,上面的示例中不管是否安装app都会跳转到百度(一般是跳转到下载界面)。如果大神知道更好的解决方法,请留言给我,谢谢