JavaScript 网页链接调用Android程序
如何让网页链接实现启动Android的应用,网上有说重写WebView相关的shouldOverrideUrlLoading方法,但是这种理论上能实现,因为你的网页不是仅仅被你自己的webview来浏览,你需要做的是让市面上的浏览器支持才行。
主要涉及到的问题就是关于Intent在字符串形式和Intent对象之间的转换。把Intent以字符串的形式传递给Android 里面的java代码接受,然后解析转化为对应Intent执行即可,主要涉及java和JavaScript的交互。
两种表现形式
Intent是Android开发中常见的API。在处理Android组件中,有着必不可少的作用。Intent可以以两种方式存在。
- Intent对象。用于在程序中处理,在处理Android组件时使用。
- 字符串形式的URI。 用于在非程序代码中,如网页中进行使用等。
而这里我们解决我们上面问题的就是后者,字符串形式的Intent。
Intent对象转成字符串URI
Intent提供了两种将对象转换成字符串URI,一个是推荐的public String toUri (int flags), 在API 4加入,将Intent对象转换成字符串形式的URI。字符串形式的URI可以包含Intent的data,action,categories, type, flags, package, component和extras。
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.mx.app.mxhaha", "com.mx.app.MxMainActivity");
intent.setComponent(comp);
Log.i(LOGTAG, "intent.uri=" + intent.toUri(Intent.URI_INTENT_SCHEME)); 生成的字符串URI为 intent:#Intent;component=com.mx.app.mxhaha/com.mx.app.MxMainActivity;end
另一个方法是public String toURI (), 这是一个弃用的方法,因为它生成的字符串以#开头,放在链接上会被当成锚点。不建议使用使用这个方法。
上面的Intent对象使用toUri转换成
#Intent;component=com.mx.app.mxhaha/com.mx.app.MxMainActivity;end
字符串URI转成Intent对象
getIntent(String uri)
这个方法只适用于处理以#开头的URI,而且在其方法内部实际上是调用的parseUri(uri, 0)来实现的。这个方法已经被比较为弃用,不推荐使用。
getIntentOld(String uri)
getIntentOld既可以支持#开头的URI转换成Intent对象,如果uri不是Intent的字符串形式,那么也会返回一个Intent,只是其data部分为uri,action为android.intent.action.VIEW。
parseUri(String uri, int flags)
这个是最完整的转换方法。接收uri和flag作为参数。支持将字符串形式的URI转成Intent对象.
以下为一个既可以解析intent:开头的URI也可以解析#Intent开头的URI的方法。
public static Intent parseIntent(String url) {
Intent intent = null;
// Parse intent URI into Intent Object
int flags = 0;
boolean isIntentUri = false;
if (url.startsWith("intent:")) {
isIntentUri = true;
flags = Intent.URI_INTENT_SCHEME;
} else if (url.startsWith("#Intent;")) {
isIntentUri = true;
}
if (isIntentUri) {
try {
intent = Intent.parseUri(url, flags);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
return intent;
}
对于Intent字符串形式URI在网页链接中的应用存在安全隐患,在乌云平台已经有人发现漏洞,使用需要谨慎。使用addJavascriptInterface在安卓4.2以下是有安全漏洞的,可以用这篇文章http://www.pedant.cn/2014/07/04/webview-js-java-interface-research/ 的方法来避免这个漏洞,另外传参也可以是自定义对象,functuon异步回调等等,返回值也可以自定义。
转自: http://droidyue.com/blog/2014/11/23/start-android-application-when-click-a-link/
JavaScript 网页链接调用Android程序的更多相关文章
- 直接拨号、将电话号码传入拨号程序、调用拨号程序、调用系统浏览器浏览网页、调用系统程序查看联系人、显示系统设置界面和显示Wi-Fi设置界面代码
直接拨号.将电话号码传入拨号程序.调用拨号程序.调用系统浏览器浏览网页.调用系统程序查看联系人.显示系统设置界面和显示Wi-Fi设置界面代码 拨打号码的代码如下: Intent callIntent= ...
- [Javascript]网页链接加上时间戳防止串用户
最近客服来报,一批用户访问公司网站的时候,由于其网络环境有代理服务器,导致A用户看到B用户的信息,这是非常尴尬的事情.解决的方法也很容易,给网址加上时间戳就可以了,用JS就能实现. JS代码如下 // ...
- js调用android本地java代码
js调用android本地java代码 当在Android上使用WebView控件开发一个Web应用时,可以创建一个通过Javascript调用Android端java代码的接口.也就是可以通过Jav ...
- js调用winform程序(带参数)
我们会发现,我们点击迅雷下载的时候 网页可以调用应用程序,而且连接会传入迅雷,这个是怎么做到的呢? 原理: 先注册表中添加软件的具体信息,然后通过 href 可以直接调用 1.写入注册表信息,注册, ...
- Android程序的入口点是什么,不是Main()吗
很多初入Android开发的网页可能不知道Android程序的入口点是什么,不是main()吗,当然我相信回复onCreate的在字面上不算错,但是你们想的是Activity中的onCreate 方法 ...
- Android Webview 和Javascript交互,实现Android和JavaScript相互调用
在Android的开发过程中.遇到一个新需求.那就是让Java代码和Javascript代码进行交互.在IOS中实现起来很麻烦.而在Android中相对来说容易多了.Android对这种交互进行了很好 ...
- [Swift通天遁地]一、超级工具-(6)通过JavaScript(脚本)代码调用设备的源生程序
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Android中通过WebView控件实现与JavaScript方法相互调用的地图应用
在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用andro ...
- 调用Android自带浏览器打开网页
转载请注明出处: http://blog.csdn.net/lowprofile_coding/article/details/77928608 在Android中可以调用自带的浏览器,或者指定一个浏 ...
随机推荐
- sqlserver 死锁查看辅助存储过程
USE [master] GO /****** Object: StoredProcedure [dbo].[sp_who_lock] Script Date: 03/23/2016 14:17:49 ...
- win32 消息说明
WM_NULL = $0000; WM_CREATE = $0001; 应用程序创建一个窗口 WM_DESTROY = $0002; 一个窗口被销毁 WM_MOVE = $0003; 移动一个窗口 W ...
- 摩根斯坦利 - 2016年09月8日 面试题 - HashMap
摩根斯坦利 - 2016年09月8日 面试题: 给定一个 Map<Person, Object> map = new HashMap<Person, Object>(); 放入 ...
- phpStrom添加插件:php文档生成(phpDocumentor)
1. 依次打开:Files => Settings => External Tools => +(add) 2. 填写信息:name:phpDoc; group:PHP插件; des ...
- spoj BRCKTS - Brackets 线段树
题目链接 给一个括号序列, 两种操作. 一种将某个位置的括号变反(左变右, 右变左), 第二种是询问这个括号序列是否合法. 线段树, 我们开两个数组lf, rg. 表示某个区间里面, 右边的左括号个数 ...
- vb socket的使用
说明:原本在 csdn 博客 写博客的,因为使用的移动宽带,csdn的 博客无法访问,所以先暂时到博客园写博客了 有能解决移动宽带 有部分网站不能访问的问题,请联系我,QQ 809775607 /** ...
- linux搭建php
http://www.cnblogs.com/wubaiqing/archive/2011/11/08/2241195.html 四,启动php-fpm & Nginx /usr/local/ ...
- 使用C#开发Metro 风格应用的路线图 -- 触屏操作
原文 http://www.cnblogs.com/icuit/archive/2012/05/01/2478312.html win8支持多点触摸技术,而我们在屏幕上所做的各种操作,也最终转换为输入 ...
- spring mvc 提交表单的例子
1. 构建MAVEN项目,然后转换成web格式,结构图如下: 2. 通过@RequestMapping来进行配置,当输入URL时,会以此找到对应方法执行,首先调用setupForm方法,该方法主要是生 ...
- uber在限制新司机加入了,看看新政策把
您可以点击“车主奖励分组查询”输入您在系统注册的手机号查询您所在奖励分组 5月25日-5月31日 奖励明细 1. 成都优步合作车主第一组 奖励政策: (账户激活时间在2015年5月29日之前) *以下 ...