Android 通过浏览器打开应用
在很多应用的web站,其实都有这样一个功能,就是直接在网页中打开应用,接下来的就来探讨一下这个功能的实现,有些地方也我还没弄明白,还请懂的大神指点。
首先,得说一点不好消息,在微信中,这样的方式是行不通的,因为微信把这种Intent(这个功能本身也就是一个Intent)给干掉了;
首先来看一段代码:
<intent-filter>
<action android:name="android.intent.action.VIEW" /> <data android:scheme="test.target" />
<data android:host="my.com" />
<data android:port=":6060" />
<data android:path="/hello0" />
<data android:pathPrefix="/hello"/> <category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
这段代码的意思也就是说,在系统中注册了一个Intent,这个Intent能干什么呢?有什么功能呢?
- action:表示这个Intent是可以从一个View中打开;
- data:配置Intent所能够接收的Data(Uri),如上面的scheme,host,port,path等等;
- category:配置Intent是可浏览的,我理解就是可以被浏览器唤起的;
这段代码很明显就是要放在被打开的应用的某一个Activity里面的;
通过这段代码分析,我们可以得出带有这样一个Uri(scheme:test.target;host:my.com;port:6060;path:hello0和path为hello开头的链接)的Intent;
而我们的html页面就需要这样一个指向上面的Uri的链接:
<a href="test.target://my.com:6060/hello">打开应用</a> <a href="test.target://my.com:8480/hellox/22">打开应用</a>
上面那个链接,正好匹配在系统中配置的Uri,而下面的那个链接,我在测试的时候发现也能打开应用,而实际上下面的链接的port和系统配置的不一样,这是我还没搞明白的地方!求大家的指点
其实到这里,我们还应该想到的是,能在应用中获取这个链接的一些参数或者属性吗?答案是肯定的,我拿了下一条链接来做一个简单的测试分析
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Uri data = getIntent().getData();
if (data != null) {
String scheme = data.getScheme(); // test.target
String host = data.getHost(); // my.com
int port = data.getPort(); // 8480
String path = data.getPath(); // hellox/22
List<String> params = data.getPathSegments(); // params0:hellox;params1:22
}
}
最后,来分析一下原理:
在androidManifest.xml中定义intent-filter的时候定义的scheme,host,port,path这些东西拼凑起来其实就是一个有用的类HTTP路径;
当在webview或者是浏览器中,尝试打开一个链接“test.target://li.com:8480/hellox/22”,如同打开http://www.xx.com是一样的,浏览器或者webview先看能否处理当前需要处理的这个uri,但是浏览器发现test.target这个schema它是处理不了的,所以就将这个链接请求发送到系统中,然后由系统搜索是否有intent-filter能够处理这个uri,如果有一个这样的intent-filter,则直接打开;如果存在多个,则会弹出一个选择界面让用户选择(如同打开一个pdf文档,如果手机中有多个pdf的阅读器,会让用户进行选择);
灵活应用:如果手机中没有这个应用,就下载此应用
在实际项目中的scheme最好定义成http,这样如果手机中没有这个应用,还可以由浏览器打开这样一个页面,要实现这个扩展功能,其实只需要定义一个页面,浏览器请求这个页面的时候直接下载应用,然后把这个页面的http地址进行分割然后配置到对应的intent-filter的各个节点中即可;
其它参考:stackoverflow
Android 通过浏览器打开应用的更多相关文章
- Android调用浏览器打开网址遇到的问题
我自己的手机(一加一代,升级了氢OS),然后在点击游戏内一个"隐私政策"-- 需要打开一个网页,然后就crash了.出错的信息如下: 完全是看不出来,然后我单独写了一个demo来测 ...
- Android通过浏览器打开app页面并且传递值
最近公司有个需求,要求从第三方网页端打开一个网页,然后在网页中点击“下载”,“打开”按钮,在app端进行下载和打开操作.这里记录下方法. 首先,网页和app页面进行交互,其实会很快想到JS交互,但是现 ...
- 调用Android自带浏览器打开网页
转载请注明出处: http://blog.csdn.net/lowprofile_coding/article/details/77928608 在Android中可以调用自带的浏览器,或者指定一个浏 ...
- Android/IOS 微信及浏览器(h5)中唤起本地APP,唤起浮层,然后用外部浏览器打开唤起某本地APP
1 前言 微信点击链接,点击唤起某APP,在微信点开,默认是微信浏览器,点击button唤起,则会先提示浮层,然后用外部浏览器打开即可. 作为记录使用. 2 代码 相关源码如下: html: < ...
- Android 如何通过浏览器打开App
首先给出参考资料http://my.oschina.net/liucundong/blog/354029?p=3#rpl_291191828 通过浏览器直接打开Android应用程序 Android ...
- cocos2d-x调用android内嵌浏览器打开网页
cocos2d-x调用android内嵌浏览器打开网页,能够从入口传入网址,C++调用android 的api就可以实现. 方法也非常easy 1. 改动"cocos2dx\platform ...
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开
ASP.NET MVC Filters 4种默认过滤器的使用[附示例] 过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...
- Android调用默认浏览器打开指定Url
业务员有需求要将一个wap站在手机上以App的形式打开,还不要嵌套WebView,只能以浏览器打开.查了点资料,就有了下面这货. package com.gzz.whyinzi; import and ...
- Android网页浏览器的开发
Android网页浏览器的核心Widget是包含了WebKit的WebView. 首先,布局文件activity_main.xml: <LinearLayout xmlns:android=&q ...
随机推荐
- php S3调用SDK示例 AmazonS3
demo.php <?php /* * To change this license header, choose License Headers in Project Properties. ...
- linux 冒号用法
冒号在Linux中是一个空命令,可以认为与shell的内建命令true相同,它的返回值是0. 在while循环中 while : 与 while true 的作用是等效的 在 if/then 中可作为 ...
- kafka相关文章引用
kafka相关内容说明: Kafka压缩 Kafka端到端审计 kafka数据可靠性深度解读 Kafka发送超过broker限定大小的消息时Client和Broker端各自会有什么异常? Kafka之 ...
- Yii2 配置request组件解析 json数据
在基础版本的config目录下 web.php 或者高级版config目录下的main.php中配置 'components' =>[ 'request' => [ 'parsers' = ...
- Linux java项目冲突不能正常运行
部署项目,在windows环境部署到Tomcat能够正常运行,部署到Linux环境下只能访问一些html资源,不能正常运行. 解决步骤: 1.清除webapps目录下所有文件夹,将war包上传至web ...
- 吴恩达机器学习笔记——正规方程(Normal Equation)
问题描述:m examples : (x(1),y(1)), (x(2),y(2)),..., (x(m),y(m)) and n features; 计算方法:θ = (XTX)-1XTy; 计算过 ...
- 福大软工1816:Beta(4/7)
Beta 冲刺 (1/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 准备四六级 展示GitHub当日代码/ ...
- alpha8/10
队名:Boy Next Door 燃尽图 晗(组长) 今日完成 和队友讨论alpha版的最终界面. 明日工作 确定alpha版既定功能的正常使用. 还剩下哪些任务 账号绑定功能以及账单信息的下载. 困 ...
- Chrome浏览器超强调试工具
原文:http://lizanhong2011.blog.163.com/blog/static/18028516720117301312729/ 在Google Chrome浏览器出来之前,我一直使 ...
- Maven实现项目构建直接部署Web项目到Tomcat
Maven实现项目构建直接部署Web项目到Tomcat配置如下: 1.Tomcat的用户及权限配置:在conf目录下,找到tomcat-users.xml,添加manager权限的用户. <ro ...