- 浏览: 7331985 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在phonegap中,通过android和iphone的webview实现对html网页的展示。本文的目的采用android中webview实现对html调用以及js调用java方法的。其实质也是phonegap插件的原理。
PhoneGap如何工作?
PhoneGap架构拥有强大的跨平台访问设备能力,但是其工作原理并不神秘,下面以iPhone和Android平台为例进行分析。
iPhone和Android平台共同点是都有内置的WebView组件,其具备两个特性:
1、WebView组件实质是移动设备的内置浏览器
WebView这个内置浏览器特性是Web能被打包成本地客户端的基础,可方便的用HTML5、CSS3页面布局,这是移动Web技术的优势相对于原生开发。
2、WebView提供Web和设备本地API双向通信的能力
PhoneGap针对不同平台的WebView做了扩展和封装,使WebView这个组件变成可访问设备本地API的强大浏览器,所以开发人员在PhoneGap框架下可通过JavaScript访问设备本地API。
明白以上两个特性,参照下面PhoneGap与设备本地API通信图,一个成熟的PhoneGap技术客户端运行状况如下:
应用运行在WebView组件上 —》 通过PhoneGap在各平台的扩展 —》 最终访问设备本地资源
WebView可以显示Web页面,并且,可以像普通的View那样应用到任何布局中。
WebView提供了两个方法用于显示网页的内容:loadUrl()用于加载一个指定的URL,而loadData()则用于直接向WebView写入指定的HTML文本。此外,loadDataWithBaseURL()和loadData()类似,但是,如果写入的HTML文本包含图片、CSS等外部资源的相对链接时,WebView就会根据指定的baseURL来正确地加载这些资源,比如:"file:///android_asset/", "<html><body background="lenovo.png">"这个方法正好符合我们显示Item的需求。
WebView的属性:Android中专门通过WebSettings来设置WebView的一些属性、状态等。可以通过WebView.getSettings()得到这个设置。
WebViewClient:专门辅助WebView处理各种通知、请求等事件的类,可以通过WebView的一个
setWebViewCilent()方法来指定一个WebViewClient对象。
如:setWebViewClient(new WebViewClient(){
@Override public boolean shouldOverrideUrlLoading(此方法:控制新的连接在当前WebView中打开)});
如果你在HTML中添加了一些JavaScript,你会发现WebView并不会执行JavaScript,这是因为WebView默认关闭了JavaScript功能。为了能执行JavaScript,需要在加载任何URL或写入HTML文本前开启JavaScript,代码如下:
WebView web = (WebView) this.findViewById(R.id.webview);
web.getSettings().setJavaScriptEnabled(true);
WebChromeClient:辅助WebView处理JavaScript的对话框、网站图标、网站Title、加载进度等
我们还可以向WebView添加更多的代码,甚至可以监听和控制WebView执行JavaScript
为了让Webview从apk载文件中加载assets,Android SDK提供了一个schema,前缀为file:///android_asset/WebView遇到这样的schema,就去当前包中的assets目录中找内容。
如:file:///android_asset/demo.html
一个简单的列子(不完整,主要说明使用WebViewClent控制新连接在当前WebView中打开):
WebView browser=(WebView)findViewById(R.id.webkit);
browser.setWebViewClient(genWebViewClientForURL());
WebSettings s = browser.getSettings();
s.setSaveFormData(false);
s.setSavePassword(false);
s.setUseWideViewPort(true);
s.setJavaScriptEnabled(true);
s.setLightTouchEnabled(true);
private WebViewClient genWebViewClientForURL() {
return new CiHaiWebViewClient();
}
private class CiHaiWebViewClient extends WebViewClient
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String strURL = "";
try {
strURL = URLDecoder.decode(url.replaceAll("fake://wistron/", ""), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (strURL.equals(STR_PRE))
{ …… } else if (strURL.equals(STR_NEXT)) { …… } else { …… }
}
有代码:browser.loadDataWithBaseURL("fake://wistron/", htmlText, "text/html", "utf-8", null);
这里的baseUrl:fake://wistron/故这里需要WebViewClient 的shouldOverrideUrlLoading()方法,且要实现URLDecoder.decode(url.replaceAll("fake://wistron/", ""), "utf-8");
目录结构如下:
android的类如下:
package com.easyway.webview; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.webkit.WebSettings; import android.webkit.WebView; /** * 为了方便网页和Android应用的交互,Android系统提供了WebView中JavaScript * 网页脚本调用Java类方法的机制。只要调用addJavascriptInterface方法即可映 * 射一个Java对象到JavaScript对象上。 * 1.先在layout文件中加入<WebView>元素 或WebView webView = new WebView(this); * 2.由于应用程序需要访问网络,所以需要在AndroidManifest.xml中请求网络权限的: 3.使用Web View 4.加载一个页面,可以用loadUrl()方法,例如: 设置WevView要显示的网页: 互联网用:webView.loadUrl("http://android.tgbus.com"); 本地文件用:webView.loadUrl(file:///android_asset/xx.html);固定格式 本地文件存放在:assets文件中 5.在Web View 中使用JavaScript 如果你加载到 Web View 中的网页使用了JavaScript,那么, 需要在Websetting 中开启对JavaScript的支持,因为Web View 中默认的是JavaScript未启用。 * * 如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。 给WebView添加一个事件监听对象(WebViewClient) 并重写其中的一些方法 shouldOverrideUrlLoading:对网页中超链接按钮的响应。 当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url onLoadResource onPageStart onPageFinish onReceiveError onReceivedHttpAuthRequest 如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用 finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消 费掉该Back事件。 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。 public boolean onKeyDown(int keyCoder,KeyEvent event){ if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){ webview.goBack(); //goBack()表示返回webView的上一页面 return true; } return false; } * * @Title: * @Description: 实现Android中WebView实现Javascript调用Java类方法 * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-5-21 * @author longgangbai * @version 1.0 */ public class AndroidWebClientActivity extends Activity { private WebView mWebView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mWebView = (WebView) findViewById(R.id.wv_content); //使用垂直滚动条 mWebView.setVerticalScrollbarOverlay(true); //获取WebView相关的设置的对象 final WebSettings settings = mWebView.getSettings(); settings.setSupportZoom(true); //WebView启用Javascript脚本执行 settings.setJavaScriptEnabled(true); //设置js可以打开window settings.setJavaScriptCanOpenWindowsAutomatically(true); //映射Java对象到一个名为”js2java“的Javascript对象上 //JavaScript中可以通过"window.js2java"来调用Java对象的方法 //要在webview中,调用addJavascriptInterface(OBJ,interfacename) //其中,obj为和javascript通信的应用程序,interfacename为提供给JAVASCRIPT调用的 名称,设置如下 mWebView.addJavascriptInterface(new JSInvokeClass(), "js2java"); //index.html在android的assets目录中 mWebView.loadUrl("file:///android_asset/index.html"); } /**网页Javascript调用接口**/ class JSInvokeClass { public String getText() { return "调用服务器的方法返回的信息"; } } /** * 利用Web View的历史记录来实现页面navigate backword. *重载Activity中的onKeyDown方法,实现此功能: */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check if the key event was the BACK key and if there's history if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()){ mWebView.goBack(); return true; } // If it wasn't the BACK key or there's no web page history, bubble up to the default // system behavior (probably exit the activity) return super.onKeyDown(keyCode, event); } }
html代码如下:
<!DOCTYPE HTML> <html> <head> <meta name="viewport" content="width=320; user-scalable=no" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>jQuery Google Maps Plugin</title> <script> function init(){ //js调用java的方法 //返回值作为text的文本值 //调用方式:window.暴露名称.方法 var val=window.js2java.getText(); var txt=document.getElementById("txt"); txt.value=val; } </script> </head> <body onload="init()"> 文件信息:<input id="txt" type="text"> </body> </html>
- AndroidWebClient.rar (51 KB)
- 下载次数: 147
发表评论
-
[转]年度最实用50款免费Android应用推荐
2012-11-08 16:39 3367据国外媒体报道,有人说Android应用市场比iPhone应用 ... -
GIS的学习(四十五)【转】Integration of the MBTiles format on Android
2012-10-22 17:13 2937转载自 http:/ ... -
GIS的学习(四十四)osmdroid sdcard检查
2012-10-15 16:12 2332在许多应用中使用到sdcard的检查,在osmdro ... -
GIS的学习(四十三)osmdroid基于几个经典代理类
2012-10-15 16:06 2624在osmdroid中给基于位置的代理类如下: pack ... -
Android中PopupWindow的用法(位置、动画、焦点)
2012-10-12 14:12 11514在Android中有很多级别的Window,不同级别的Wind ... -
【转】Android根据分辨率进行单位转换-(dp,sp转像素px)
2012-10-11 09:18 27127Android系统中,默认的单位是像素(px)。也就是说,在没 ... -
GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析
2012-09-23 11:49 11514在手机通过osmdroid调用离线地图必须放在 ... -
GIS的学习(二十八)Osmdroid相关的开源项目
2012-09-23 11:31 25395osm 数据格式(openstreet map)与Ro ... -
GIS的学习(二十七)通过geoserver的georss访问第三方地图
2012-09-23 00:34 3599在geoserver中如果想调用第三方地图可以采 ... -
android中使用 定时更新界面定时器Timer的使用
2012-09-22 22:09 25514handler的使用 一、Handler的定义: ... -
【转】Android应用程序的自动更新升级(自身升级、通过tomcat) .
2012-09-16 15:03 7356http://blog.csdn.net/mu0206mu/a ... -
GIS的学习(二十七)OGC 的WCS WFS 及WMS 服务
2012-09-11 22:22 12105http://www.gisall.com/?6678/v ... -
GIS的学习(二十六)geotools 使用 部分代码总结
2012-09-11 22:20 5692前段时间的一个项目 本来用ae完成了种种的 查询,空间分析等等 ... -
GIS的学习(二十五)geoserver wms中的各种操作API详细讲解和使用
2012-09-10 17:42 9700官方geoserver中WMS服务中几种操作的API的详细说明 ... -
GIS的学习(二十四)android异步调用geoserver wms中的地图
2012-09-10 17:38 8154在geoserver的客户端通过wms的GetMap实现 ... -
GIS的学习(二十三)geoserver中CQL和ECQL的使用
2012-09-10 16:29 6618以下引用自官方文档: CQL and ECQL¶ CQ ... -
GIS的学习(二十二)osmdroid中添加縮放控件
2012-09-06 23:09 2783package com.geoserver.osmdroid; ... -
GIS的学习(二十一)在osmdroid 地图中添加marker 并添加事件
2012-09-06 22:27 6611我有 osmdroid,overlayswithf ... -
GIS的学习(二十)基于Geoserver的WFS服务与Openlayers实现地理查询
2012-08-30 18:48 11400基于Geoserver发布的wfs服务,与Openlayers ... -
GIS的学习(十九)Geoserver使用添加,删除,查询地图中的POI
2012-08-30 17:28 10349在geoserver自定义的地图中通过geoserver ...
相关推荐
### PhoneGap介绍与原理 #### 背景与挑战 随着移动互联网的快速发展,各种平台如雨后春笋般涌现,其中包括移动设备、桌面应用、Web应用及Flash应用等。这种多平台的趋势为企业和个人开发者带来了前所未有的机遇,...
通过上述内容的学习,我们可以看出 **PhoneGap** 提供了一种强大的解决方案,使得开发者能够使用 Web 技术构建出跨平台的应用程序。同时,通过结合各种第三方库和插件,开发者可以轻松地为应用程序添加更多复杂的...
1. "深入浅出 phonegap 代码.zip" - 这个文件可能是关于PhoneGap的教程或者示例代码,包含了深入讲解PhoneGap使用方法的代码示例,可以帮助初学者理解PhoneGap的工作原理和实践应用。 2. "ionic-1.1.zip" - 这是...
在学习过程中,理解PhoneGap的工作原理,熟悉其开发流程,以及掌握如何调试和优化应用性能都是非常重要的知识点。 总的来说,"我的第一个PhoneGap应用"是一个很好的起点,它涵盖了从环境配置、项目创建、UI设计、...
这个资源包含PhoneGap的源代码,版本为Cordova2.9,以及相关的示例程序,这为我们深入理解PhoneGap的工作原理和开发流程提供了宝贵的材料。 Cordova2.9是PhoneGap的一个重要版本,它在那时提供了对多种移动操作系统...
PhoneGap是一个开源框架,它允许开发者使用HTML5、CSS3和JavaScript来构建跨平台的移动应用。这个"phonegap完整例子!"是针对Android平台的一个示例项目,...这些内容为深入学习和实践PhoneGap开发提供了全面的指导。
通过学习和分析`phonegap100_apidemo`中的代码,开发者不仅能理解PhoneGap的工作原理,还能掌握如何将这些技术应用到实际项目中,从而构建出功能丰富的跨平台移动应用。在实践中,不断调试和优化这些示例,有助于...
总的来说,"phonegap-2.7.0源码"是一个宝贵的学习和研究资源,对于理解PhoneGap的工作原理、Web与原生平台之间的交互,以及早期移动应用开发的历程都有重要的价值。通过深入研究,开发者可以提升自己的技能,同时也...
PhoneGap和Cordova是两个密切相关的移动应用开发框架,它们允许开发者使用HTML、CSS和JavaScript来构建跨平台的原生...在实际开发中,理解并熟练运用PhoneGap和Cordova的原理和特性,能够显著提升开发效率和应用质量。
总的来说,PhoneGap 2.9.1是一个历史版本,但它展示了PhoneGap跨平台开发的核心理念和早期实现方式。随着技术的发展,PhoneGap不断改进,以适应不断变化的移动开发需求。尽管有其局限性,但PhoneGap依然是许多开发者...
综上所述,通过PhoneGap 3.0,我们可以结合加速计API和自定义插件来实现一个有趣的功能——摇一摇手机自动拨打电话。这不仅展示了PhoneGap的跨平台能力,也体现了其灵活的扩展性,使得开发者能够充分利用移动设备的...
这个实例是开发者学习和理解PhoneGap硬件访问能力的一个好例子。 首先,我们要理解PhoneGap的核心概念。PhoneGap通过一个JavaScript API提供了一个桥梁,让Web开发者能够调用设备的硬件功能,如摄像头、GPS、加速度...
- 优势:PhoneGap的最大优点在于其跨平台能力,开发一次,可以在iOS、Android、BlackBerry、Windows Phone等多个平台上运行,大大节省了开发时间和成本。此外,由于使用Web技术,对于有前端开发经验的程序员来说,...
通过研究这些源码,开发者不仅可以学习到PhoneGap的基本用法,还能了解到如何利用PhoneGap调用设备API,如网络通信、传感器数据、用户界面交互等。这对于希望入门移动开发或者提升PhoneGap技能的开发者来说是一份...
通过这份"PhoneGap开发者指南源码",开发者不仅能学习到PhoneGap的基本用法,还能深入理解其工作原理,进而开发出具有丰富功能和优秀用户体验的跨平台移动应用。同时,不断实践和探索,将使开发者在PhoneGap开发领域...
在"HTML5+PhoneGap跨平台移动应用软件开发 概述"的课程中,你将学习如何设置开发环境,创建第一个PhoneGap项目,以及如何使用HTML5和JavaScript构建应用界面和逻辑。此外,你还将了解如何调试和测试应用,以及如何...
通过学习和调试这个Demo,你可以了解PhoneGap的工作原理,为之后开发更复杂的应用打下基础。同时,这也是检查和解决PhoneGap环境问题的一个好方法,如果你在搭建环境时遇到困难,对照这个Demo的配置和运行过程,或许...
这个"PhoneGap demo"作为一个实际案例,可以帮助开发者理解PhoneGap的工作原理,学习如何将Web技术应用于移动开发,同时也可以借鉴其设计和实现方式,提升自己的开发技能。尽管对于初学者来说可能有一定难度,但它...