Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数

简介:

点击浏览器中的URL链接,启动特定的App。

  1. 首先做成HTML的页面,页面内容格式如下:
<a href="[scheme]://[host]/[path]?[query]">启动应用程序</a>

 

这一句就可以了。
各个项目含义如下所示:
scheme:判别启动的App。 ※详细后述
host:适当记述
path:传值时必须的key     ※没有也可以
query:获取值的Key和Value  ※没有也可以
  1. 作为测试好好写了一下,如下:
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <br/> <a href="fyfeng://Panda/test1?name=http://124.200.36.22:8000/test/namelist.json&age=26">打开app</a><br/> <br/> <a href="fyfeng://Panda/test2?name=zhangsan&age=27">打开app1</a><br/> <br/> <a href="fyfeng://Panda/test3?name=zhangsan&age=28">打开app2</a><br/> <br/> </body> </html>

  1. 接下来是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记述的内容加入

<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>

可以复制代码,这样的话,没有问题。

  1. 接下来在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传递过来的值了。 
我在测试的超链接上添加name的属性是一个需要请求服务器的URL,这样的话,我们可以通过根据这个URL请求服务器,获取到一些我们所需要的数据,这个数据的是以Json的形式存在,通过volley请求下来数据,并使用Gson解析后得到数据。

 public static void getUrlValue(Intent i_getvalue, final String tag, Context context) {
        String action = i_getvalue.getAction(); if (Intent.ACTION_VIEW.equals(action)) { Uri uri = i_getvalue.getData(); if (uri != null) { mRequestQueue = Volley.newRequestQueue(context); final String name = uri.getQueryParameter("name"); // System.out.print(name); // final String name = "http://124.200.36.22:8000/test/namelist.json"; String age = uri.getQueryParameter("age"); String host = uri.getHost(); String dataString = i_getvalue.getDataString(); String id = uri.getQueryParameter("id"); String path = uri.getPath(); String path1 = uri.getEncodedPath(); String queryString = uri.getQuery(); new Thread(new Runnable() { @Override public void run() { if (name != null) { JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(name.toString().trim(), null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Gson gson = new Gson(); Singersin=gson.fromJson(response.toString(),Singer.class); daytime= sin.getSinger().getDaytime(); order=sin.getSinger().getOrder(); title=sin.getSinger().getTitle(); Log.d("TAG", response.toString()); Log.i(tag, "name:" + name); Log.i(tag, "time:" + daytime); Log.i(tag, "order:" + order); Log.i(tag, "title:" + title); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } }); mRequestQueue.add(jsonObjectRequest); } } }).start(); Log.i(tag, "dataString:" + dataString); Log.i(tag, "id:" + id); Log.i(tag, "path:" + path); Log.i(tag, "path1:" + path1); Log.i(tag, "queryString:" + queryString); Log.i(tag, "name" + name + " age" + age); } } } }

服务器的Json数据

{'singer':{'daytime':12,'order':'45','title':'订单'}}

 

日志输出结果:

D/TAG: {"singer":{"daytime":12,"order":"45","title":"订单"}} name:http://124.200.36.22:8000/test/namelist.json time:12 order:45 title:订单 path:/test1 path:/test2

demo链接点击去下载 
http://download.csdn.net/detail/jackron2014/9483691


    本文转自 一点点征服   博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/8618109.html,如需转载请自行联系原作者

相关文章
|
9天前
|
缓存 网络协议 JavaScript
浏览器输入url之后最后网页渲染出来经过了什么
【10月更文挑战第31天】从浏览器输入 URL 到网页渲染出来是一个涉及多个环节和技术的复杂过程,每个环节都对最终的网页显示效果和用户体验有着重要的影响。
21 3
|
12天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
14天前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
1月前
|
缓存 网络协议 前端开发
浏览器输入一个URL后,发生了什么?
浏览器输入一个URL后,发生了什么?
25 1
|
29天前
|
域名解析 缓存 网络协议
浏览器输入 URL 回车后会经历哪些步骤?
本文首发于微信公众号“前端徐徐”,详细解析了从在浏览器中输入URL到页面完全呈现的全过程,涵盖检查缓存、URL解析、DNS解析、TCP连接、HTTP请求、服务器响应、浏览器处理响应、页面解析与渲染、关闭TCP连接等关键步骤。通过这些步骤,帮助读者深入了解互联网的工作原理,提升网站性能和用户体验。
15 0
|
1月前
|
前端开发 UED 开发者
uni-app:去除导航栏&跨域的问题&blobe查看图片&v-deep&页面操作 (五)
本文介绍了几个前端开发技巧:1) 如何通过设置 `navigationStyle` 为 `custom` 去除顶部导航;2) 解决跨域问题的方法,包括使用 `dotenv` 加载全局变量和配置 `devServer` 的代理;3) 使用 Blob 和 FileReader 查看图片;4) 利用 `v-deep` 深度作用选择器修改样式;5) 修改页面左上角返回按钮的行为。
|
3月前
|
网络协议 前端开发 JavaScript
浏览器加载网页的幕后之旅:从URL到页面展示详解
【8月更文挑战第31天】当在浏览器地址栏输入URL并回车后,一系列复杂过程随即启动,包括DNS解析、TCP连接建立、HTTP请求发送、服务器请求处理及响应返回,最后是浏览器页面渲染。这一流程涉及网络通信、服务器处理和客户端渲染等多个环节。通过示例代码,本文详细解释了每个步骤,帮助读者深入理解Web应用程序的工作机制,从而在开发过程中作出更优决策。
59 5
|
3月前
|
应用服务中间件 Linux 网络安全
【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
|
3月前
|
安全 JavaScript 应用服务中间件
【Azure Function App】如何修改Azure函数应用的默认页面呢?
【Azure Function App】如何修改Azure函数应用的默认页面呢?

热门文章

最新文章