最近公司有个需求,要求从第三方网页端打开一个网页,然后在网页中点击“下载”,“打开”按钮,在app端进行下载和打开操作。这里记录下方法。

首先,网页和app页面进行交互,其实会很快想到JS交互,但是现在需要在第三方浏览器中,那就没法拿到Webview,也就没法js互交,所以这里android也提供有方法。 
看一个静态页面(html):

<BODY>
<a href="hjz://com.zjmk.hjz_progressmotirx/openwith?gameid=12007&pk_name=com.surfing.android.tastyfood">启动应用程序</a>
</p></br></p>
<a href="hjz://com.zjmk.hjz_progressmotirx/down?apkurl=http://down.hjz518.com/upload/APK/2015-5/19/150519172102.apk&apkname=黄金指&memo=这是一款牛逼的手赚软件&gameid=12007&pk_name=com.surfing.android.tastyfood">启动应用程序下载页面</a>
</BODY>

我们看看href里面的组成: 
- hjz://:这里的hjz://是“scheme”。 
- com.zjmk.hjz_progressmotirx:这个是“host”。 
- /down:这个是方法名前缀“pathPrefix”。 
- apkurl=….&pkname=…:这个是传递的参数。

看到以上代码可能还是不是很明白这些有什么用,那么接着往下看…. 
看android端: 
其实在android里面的项目清单住处的Activity下面可以添加很多数据节点,如 ,,,….

<activity android:name=".OpenapkActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar">
<intent-filter>
<action android:
name="android.intent.action.VIEW"/>
<category android:
name="android.intent.category.DEFAULT" />
<category
name="android.intent.category.BROWSABLE" />
<data
android:scheme="hjz" android:host="com.zjmk.hjz_progressmotirx" android:pathPrefix="/openwith"/>
</intent-filter>
</activity>

看这个activity注册,在其下面添加了几个数据节点,action,category,data。看来data里面的数据应该就很明白了,data节点里面的数据都是和我们网页相对应的,如 
scheme=”hjz”,//协议 
host=”com.zjmk.hjz_progressmotirx”;//主机 
pathPrefix=”/openwith”;//方法前缀

只有先对应才能正确的启动页面。

在activity中获取数据:

protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.openapklayput);
Intent intent=getIntent();
String action = intent.getAction();
if(Intent.ACTION_VIEW.equals(action)){
Uri uri =intent.getData();
if(uri != null){
//根据属性值获取数据
String gameid=
uri.getQueryParameter("gameid");
String pkname=
uri.getQueryParameter("pk_name");
PackageManager packageManager =
getPackageManager();
Intent intent2=new Intent();
intent2 =packageManager
.getLaunchIntentForPackage(pkname);
startActivity(intent2);
Intent intent1=
new Intent(this,MotirxServices.class);
}
}
}

……到这里可以完成第三方浏览器和自己app应用的交互在跳过WebVIew的情况下,但是这里可能会有一个悲催的事情,就是他的兼容性。在369获取猎豹浏览器中href=“”;这里在scheme前面自动加上http://….. 
这里就导致不能正常的打开我们指定的app页面。系统内置浏览器肯定是可以的,只是第三方浏览器可能存在这个问题,不过我的手机测试基本都可以,没问题。

Android通过浏览器打开app页面并且传递值的更多相关文章

  1. 通过手机浏览器打开APP或者跳转到下载页面.md

    目录 通过手机浏览器打开APP或者跳转到下载页面 添加 schemes 网页设置 参考链接 通过手机浏览器打开APP或者跳转到下载页面 以下仅展示最简单的例子及关键代码 由于硬件条件有限,仅测试了 A ...

  2. Android 获取浏览器当前分享页面的截屏

    Android 获取浏览器当前分享页面的截屏 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/BrowserScreenShotActivity 文中 ...

  3. ASP.NET页面之间传递值的几种方式

    目录 QueryString Session Cookie Application 一.QueryString QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中. ...

  4. [转]ASP.NET页面之间传递值的几种方式

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  5. ASP.NET页面之间传递值的几种方式(转载)

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  6. [转载]ASP.NET页面之间传递值的几种方式

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  7. ASP中页面之间传递值的几种方式

    ASP.NET页面之间传递值的几种方式 页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryS ...

  8. spring boot 之如何在两个页面之间传递值(转)

    原文地址:spring boot 之如何在两个页面之间传递值 问题:页面之间的跳转,通常带有值的传输,但是,在现在比较流行的SPRING MVC WEB 开发模型中,设计机制导致页面之间的直接接跳转和 ...

  9. ASP.NET 页面之间传递值的几种方式

    1.使用QueryString,  如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer4.Applicatio ...

随机推荐

  1. 进阶篇:3.9)3d打印件设计

    本章目的:了解3d打印,购买3d打印机. 1.3d打印基础知识: 现在主流的3d打印技术有4种:①FDM:②SLA:③SLS:④3DP.具体如下: ①熔融沉积造型(Fused deposition m ...

  2. HTML学习-02

    1.本次学习主要是css和页面的跳转 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  3. Vue + iview框架,搭建项目遇到的相关问题记录 - 国际化router.js不能实现

    例子展示: 概述: 最近在使用vue + iview框架进行web开发,并且有一个需求,需要实现web端的国际化,在完成相关配置文件后,发现router.js 中无法配置,并且会出现异常,在经过百度找 ...

  4. centos 7 下安装nginx-1.15.7

    安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装安装 nginx 需要先 ...

  5. SpringCloud---消息总线---Spring Cloud Bus

    1.概述 1.1 在微服务架构的系统中,我们通常会使用   轻量级的消息代理  来  构建一个共同的消息主题   让系统中所有微服务实例都连接上来: 由于  该主题中产生的消息  会被所有实例监听和消 ...

  6. android TCP 和 UDP总结(转)

    之前写过一些关于TCP和UDP数据传输的代码,比如使用TCP传输音视频数据包,P2P打洞中使用UDP等.写好之后就直接丢下了,没有总结下都.最近准备找工作,再拿来温习下. 1.还是先说点啥 暂时把自己 ...

  7. windows下限制Redis端口只能由本机访问

    在使用redis的时候,我只想要本机能够访问,这时可通过防火墙会阻止外界的访问 1.找到防火墙,选择高级设置2.点击"入站规则",再点击"新建规则" 3.点击& ...

  8. 【Linux】Linux C socket 编程之UDP

    发送方: /* * File: main.c * Author: tianshuai * * Created on 2011年11月29日, 下午10:34 * * 主要实现:发送20个文本消息,然后 ...

  9. TXSQL:云计算时代数据库核弹头——云+未来峰会开发者专场回顾

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广州召开,广东省各级政府机构领导.海内外业 ...

  10. h5移动端设置键盘搜索

    点击键盘上的搜索按钮实现页面跳转 <form action="#list?goods_title={{message?message:''}}" @submit.preven ...