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中可以调用自带的浏览器,或者指定一个浏 ...
随机推荐
- openstack之horizon源码分析
一.基础准备: Horizon是基于django webframework开发的标准的Python wsgi程序,django的设计专注于代码的高度可重用,信奉DRY原则,一切面向对象,而Horizo ...
- ASP.NET MVC 学习之路-4
本文在于巩固基础 模型绑定 从URL 获取值 public ActionResult About(int id) { ViewBag.Id = id; return View(); } @{ View ...
- NTFS 文件系统解析
1. windows 下磁盘文件读写 下面是读取D:\磁盘上的第0扇区 512 Bytes CreateFile()打开磁盘,获取文件句柄: SetFilePointer()设置读写的位置: Read ...
- python 学习笔记 9 -- Python强大的自省简析
1. 什么是自省? 自省就是自我评价.自我反省.自我批评.自我调控和自我教育,是孔子提出的一种自我道德修养的方法.他说:“见贤思齐焉,见不贤而内自省也.”(<论语·里仁>)当然,我们今天不 ...
- Android DatePicker和TimePicker
监测日期改变的监听器: OnDateChangedListener和OnTimeChangedListener() 当用户改变Datepicker里的年.月.日时,将触发 ...
- Window及document对象的区别
一.Window对象 -------------------------------------------------- ------------------- 对象属性 window //窗户自身 ...
- WEB开发之如何改善PHP开发方式
改善PHP开发方式一般可以分为以下几种实现方式: 1.组织和样式 找出一种适合你的组织方法和编码样式,并且一直坚持下去,这样的话,你的代码的组织和布局会变得十分有条理.我们不应该轻视代码的组织 ...
- 【java】for循环输出数字金字塔
输出下列数字金字塔. 1 121 123211234321 public class deng { public static void main(String args[]) { int n ...
- 几家SIEM
HP Arcsight Imperva is a HP Business Partner. HP is the world's largest IT company, providing infras ...
- Delphi下TLabel鼠标MouseEnter、MouseLeave更改颜色失灵
在Delphi 7下,如果想在鼠标MouseEnter.MouseLeave的时候改变TLabel自身的颜色,很多人可能会采用 Label.Color := clRed;这样的方式来实现,我当初也是一 ...