浏览器启动APP
2017-05-16 15:44
162 查看
#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。大概就这个思路了。不过楼主没有实际去操作。项目时间紧,太麻烦了。
点击一个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。大概就这个思路了。不过楼主没有实际去操作。项目时间紧,太麻烦了。
相关文章推荐
- 启动自己浏览器app的方法
- 手机浏览器判断app是否安装并启动
- Android在浏览器启动APP
- Android在浏览器启动APP
- Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数
- 浏览器点击链接启动安卓APP
- 在APP中注册URL Schemes,实现浏览器中输入url启动应用程序
- 浏览器中启动app
- 通过浏览器启动APP
- Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数
- 在手机浏览器启动你的app
- Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数
- android 通过浏览器启动app,如果本地app先启动了,会出现启动两次的问题
- Android在浏览器启动APP
- 在手机浏览器启动你的app
- android开发之在浏览器里面启动手机APP
- 浏览器通过Scheme协议启动APP中的页面
- 安装部署中的数据库打包和快捷方式启动浏览器
- 安装部署中的数据库打包和快捷方式启动浏览器
- 安装部署中的数据库打包和快捷方式启动浏览器