android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
为了实现这个功能可折腾了我好久,先上一份代码,经楼主验证是绝对可以用的而且也比较清晰的代码!(ps:还是先剧透下吧,第三方大部分浏览器无法成功。)
点击浏览器中的URL链接,启动特定的App。
首先做成HTML的页面,页面内容格式如下:
<a href="[scheme]://[host]/[path]?[query]">启动应用程序</a>
这一句就可以了。
各个项目含义如下所示:
scheme:判别启动的App。 ※详细后述
host:适当记述
path:传值时必须的key ※没有也可以
query:获取值的Key和Value ※没有也可以
作为测试好好写了一下,如下:
<a href="myapp://jp.app/openwith?name=zhangsan&age=26">启动应用程序</a>
接下来是Android端。
首先在AndroidManifest.xml的MAIN Activity下追加以下内容。(启动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>
HTML记述的内容加入<data …/>。
其中必须的内容仅scheme,没有其他内容app也能启动。
※注意事项: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函数里的:
Intent i_getvalue = getIntent();
String action = i_getvalue.getAction();
if(Intent.ACTION_VIEW.equals(action)){
Uri uri = i_getvalue.getData();
if(uri != null){
String name = uri.getQueryParameter("name");
String age= uri.getQueryParameter("age");
}
}
这样就能获取到URL传递过来的值了。
——————————————————————————————————我是分割线————————————————————————————————————
代码copy完了,是不是很惊奇的发现用浏览器输入
myapp://jp.app/openwith?name=zhangsan&age=26
是不是404,打不开?
楼主你这不是骗人么!楼主你个混蛋啊。
客官,稍安勿躁啊,你看看你用的浏览器是什么?UC,猎豹,欧朋?放弃吧,试试系统自带浏览器或者谷歌浏览器吧。肯定能成功的,不能成功的话再来坑我。哈哈。
——————————————————————————————————我是分割线————————————————————————————————————
突然觉得好悲哀,好不容易get了这个技能,却不能被第三方浏览器使用。在这个android浏览器大部分被第三方占据着的时代不得不说是个悲剧啊。
接下来还是说说为什么第三方浏览器不能成功吧。首先,我发现的是UC浏览器,如果你使用了自己的scheme,而不是http的话,uc会默认在你的scheme前面添加http://。这太坑爹了。其他浏览器没看是不是同样的情况。发现这个问题后我就试着把自己的scheme换成http。然后满怀期待的又跑了一遍,结果还是坑爹了。所以我想会不会是第三方浏览器对url做了处理。到这里,我也无可奈何了。我测试了UC,猎豹,欧朋,这3个都不支持。系统自带的和谷歌浏览器是支持的。
最后再补充个线索吧,在浏览器里搜索百度应用。进了他们的页面后,他们是可以实现在各种浏览器启动已经安装好的本地app的。看到这个后我就看了下他们页面的源码。
在这里他们页面添加了个data-sentintent的标签,看到这里,应该能确定第三方浏览器应该是默认都不支持发intent的,只能自己起一个。根据前端说,这个标签应该是自定义的。我们前端看源码的时候发现是这样的
所以最后的结果应该是百度这边是起了个端口,然后在应用里启用了一个服务,来监听这个端口,来获取这个intent。大概就这个思路了。不过楼主没有实际去操作。项目时间紧,太麻烦了。
分享到:
相关推荐
本工程用于展示使用java如何实现这样的功能:使用系统默认浏览器打开http网址;使用用户指定的浏览器打开http网址。 本工程编码方式为:GBK 出现异常即解决方法: 当调用Tool类中的第二个方法时,指定的browerType...
ViliDownloadProcess 微信,头条内扫描二维码或点击链接地址,识别最新系统(Android或IOS),Android替换至系统替代浏览器进行Apk下载,IOS转换至App Store进行应用下载
本小程序是一个支付宝控件接口示例,当进入支付宝页面的时候点击所要支付的内容时会弹出提示框问是否安装支付宝支付服务,用户可以选择是否可以安装,只有安装后才可以支付,大家可以多多学习里面的编写思想,界面...
Android WebView或手机浏览器打开连接问题解决办法总结 1.通常情况下 大家可能都想使用WebView打开网页内部链接而不想再调用手机浏览器, 我们可以通过以下两种方法实现: (1)为WebView设置一个WebViewClient,并...
AndroidStudio使用文档 .
android-todo ToDo app which showcases Offline-first MVP architecture with Dependency Injection
获取android手机ip 包含wifi下的 .之前在wifi下获取的ip都是一串乱码,表示不知道是什么东西.如fe80::9a4b:4aff:fea6:3503%tiwlan0
这是我之前做过的二维码项目的源码,将Zxing包进行了精简,扫描速度很快,可以直接加入项目中,里面有我详细的注释,加载到工程中只需要更改一下Android的版本就可以运行了
Android App Development 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除
(安装方法:https://blog.csdn.net/zj499063104/article/details/91606978) 作为java初学者用eclipse开发时,经常会遇到一个问题,当我们想查看函数(方法)的具体实现时,会通过F5或者Ctrl+鼠标左键,进入函数。...
Android tool library > Including a large part of the Android application development process commonly used tools. Tools source from the network and write their own. (Constantly collecting and sorting...
使用Tcpdump apk抓包工具,资源包含apk、apk源码和抓包使用说明文档,轻松抓包
自定义的下载方法,可以直接copy到自己代码中,需要实现文件下载,或者版本更新的时候可以试试,支持android7.0
使用AndroidStudio开发工具,基于Bomb云数据库,完成的一个信息采集系统,功能齐全可以用作本科毕业设计。
专长:通过浏览器链接分享(对于非 LocalSend 用户) 壮举:当文件无法打开时添加“从历史记录中删除”按钮(通过@TheGB0077) 壮举:复制/打开链接时关闭消息请求 壮举:略微提高传输速度 专长:使用 v1 回退实现 ...
Android应用源码某国企安卓办公OA项目,用入学习,如用商业,后果自负
I am currently collecting data on which devices it will and will not work oh, and manually excluding devices which will not work on so it does not show up in their android market.It will work on most...
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
安卓 android camera 相机