013_浏览器启动APP

#1 需求
点击一个url链接,会启动手机中安装的app,可以通过url传递参数,如果本机没有安装app,跳转下载链接;兼容第三方浏览器
#3 原理:
浏览器中执行一个带特定标记( scheme)的url,本地app在Activity的声明中做相同配置即可
#4 实现
1)html文件:text.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<a href="https://www.baidu.com/?tn=96180901_hao_pg">跳转百度</a>
<a href="dxzq://106.37.173.33:8060/jgone?a=b">启动应用程序</a>
</body>
</html>

2)android实现:
manifest.xml配置:
<activity android:name=".MainActivity">
<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="ahttps" android:host="106.37.173.33" android:pathPattern="/jgone/app-debug.apk"/>
</intent-filter>
</activity>

代码中获取传递的参数:
Uri data = getIntent().getData();
if(data != null){
String scheme = data.getScheme(); // "http"
Log.i(TAG,">>>> scheme = "+scheme);

String host = data.getHost(); // "twitter.com"
Log.i(TAG,">>>> host = "+host);
int port = data.getPort();
Log.i(TAG,">>>> port = "+port);
List<String> params = data.getPathSegments();
for(int i = 0;i<params.size();i++){
Log.i(TAG,">>>> position ="+i+" param = "+params.get(i));
}

String name = data.getQueryParameter("a");//?a=b 参数

Log.i(TAG,">>>> Parameter name="+name);
}

#5 三方浏览器的兼容问题:
UC浏览器,如果你使用了自己的scheme,而不是http的话,uc会默认在你的scheme前面添加http://。这太坑爹了。其他浏览器没看是不是同样的情况。发现这个问题后我就试着把自己的scheme换成http。然后满怀期待的又跑了一遍,结果还是坑爹了。所以我想会不会是第三方浏览器对url做了处理。到这里,我也无可奈何了。我测试了UC,猎豹,欧朋,这3个都不支持。系统自带的和谷歌浏览器是支持的。
最后再补充个线索吧,在浏览器里搜索百度应用。进了他们的页面后,他们是可以实现在各种浏览器启动已经安装好的本地app的。看到这个后我就看了下他们页面的源码。
在这里他们页面添加了个data-sentintent的标签,看到这里,应该能确定第三方浏览器应该是默认都不支持发intent的,只能自己起一个。根据前端说,这个标签应该是自定义的。我们前端看源码的时候发现是这样的
所以最后的结果应该是百度这边是起了个端口,然后在应用里启用了一个服务,来监听这个端口,来获取这个intent。大概就这个思路了。不过楼主没有实际去操作。项目时间紧,太麻烦了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值