`
l241002209
  • 浏览: 88392 次
文章分类
社区版块
存档分类
最新评论

使用HTML5开发Android本地应用(一)

 
阅读更多

HTML5是现在最热门的技术之一,Android自带的WebKit浏览器对于HTML5有着不错的支持<wbr>,而各种浏览器的最新版本都开始普遍的支持HTML5。使用HTML5开发手机应用的主要好处有两个:一个<wbr>是应用可以跨平台,包括不同的手机平台和PC;二是可以从服务器下载应用的内容,但是不依赖于后台Serv<wbr>er也可以运行,可以把Web应用和本地应用更好的结合在一起。</wbr></wbr></wbr>

这一系列文章的目的在于研究和实验使用HTML5开发Android本地应用的优缺点和可行性,包括HT<wbr>ML5本身的优点和局限性,网页部分和应用环境之间的交互,以及我们可以怎样控制和修改浏览器插件的行为,<wbr>把它和手机本身的环境更好的结合在一起。</wbr></wbr>

首先是把一个WebView嵌入到应用界面中,建立起它和环境的交互,然后加载一个简单的HTML5页面。<wbr>要被加载的HTML文件放在asset目录中,可以通过url "file:///android_asset/index.html"来加载。这个页面的作用只是用ca<wbr>nvas画一个简单的图形。</wbr></wbr>

	String path = "file:///android_asset/index.html";
	String TAG = "WebClientDemo";
	boolean isLoadResources = true;
	WebView mWebView;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.webview1);
		init();
		mWebView.loadUrl(path);
	}

初始化WebView,设置参数,关键是设置语言为UTF-8和保证支持JavaScript

		mWebView = (WebView) findViewById(R.id.myWebView1);
		mWebView.setBackgroundColor(Color.WHITE);
		mWebView.getSettings().setDefaultTextEncodingName(<wbr>"UTF-8");
		mWebView.getSettings().setSupportZoom(true);
		mWebView.getSettings().supportMultipleWindows();
		mWebView.getSettings().setJavaScriptEnabled(true);
		mWebView.clearView();</wbr>

WebViewClient负责截获并修改加载网页过程中的各种事件。首先给mWebView设置一个新<wbr>的WebViewClient,然后重写函数shouldOverrideUrlLoading。这么做<wbr>的原因保证点击WebView插件中的Url链接的时候,仍然是在WebView插件中显示页面,而不是调<wbr>用系统的网络浏览器。</wbr></wbr></wbr>

		mWebView.setWebViewClient(new WebViewClient() {
			// Intercepts url loading
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return true;
			}
                        
                        ...
                }

以下是在WebViewClient中,截获并且修改其它的事件行为的代码。例子代码中截获的事件包括网<wbr>页加载前,加载后,错误,重复提交,加载资源等。比如,发生网页错误的时候,可以用自己的错误信息取代浏览<wbr>器插件的错误提示。</wbr></wbr>

			// Intercepts the resource loading events
			@Override
			public void onLoadResource(WebView view, String url) {
				if (!isLoadResources) {
					Log.i(TAG, "Block resource loading:" + url);
					return;
				} else {
					Log.i(TAG, "Continue resource loading:" + url);
					super.onLoadResource(view, url);
				}
			}

			// Intercepts error message
			public void onReceivedError(WebView view, int errorCode,
					String description, String failingUrl) {
				Log.i(TAG, failingUrl);
				Toast.makeText(activity, "网页错误: " + errorCode + " 网页不可用",
						Toast.LENGTH_LONG).show();
			}

			// Intercepts form resubmission
			public void onFormResubmission(WebView view, Message dontResend,
					Message resend) {
				Log.i(TAG, "Resubmission");
				Toast.makeText(activity, "不可重复提交,按Back回到上级网页",
						Toast.LENGTH_SHORT).show();

			}

			// Intercepts page started event
			public void onPageStarted(WebView view, String url, Bitmap favicon) {
				Log.i(TAG, "Page load start");
			}

			// Intercepts page finished event
			public void onPageFinished(WebView view, String url) {
				Log.i(TAG, "Page load finish");
			}

在Webview下,当按下Back键时,需要调用WebView中Back,访问历史页面,当没有历史页<wbr>面的时候提示是否要退出。</wbr>

需要在当前Activity中重写onKeyDown函数,处理Back事件。

	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// Forwards the back key event to browser plugin
		if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
			String url;
			mWebView.goBack();
			return true;
		}
		// Pops up a dialog before exit
		if ((keyCode == KeyEvent.KEYCODE_BACK) && (!mWebView.canGoBack())) {
			new AlertDialog.Builder(this)
					.setTitle(R.string.title)
					.setMessage(R.string.quit_desc)
					.setNegativeButton(R.string.cancel,
						new DialogInterface.OnClickListener() {
							@Override
							public void onClick(DialogInterface dialog,
									int which) {
								}
							})
					.setPositiveButton(R.string.confirm,
						new DialogInterface.OnClickListener() {
							@Override
							public void onClick(DialogInterface dialog,
									int whichButton) {
								android.os.Process
								.killProcess(android.os.Process
											.myPid());
							}
						}).show();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}

WebChromeClient负责处理Javascript的对话框,网站图标,加载进度条等。下面的<wbr>代码,在Activity上添加一个加载网页的进度条</wbr>

		mWebView.setWebChromeClient(new WebChromeClient() {
			public void onProgressChanged(WebView view, int progress) {
				activity.setProgress(progress * 100);
			}
		});

退出提示框

back.png

HTML5显示效果和页面代码:

  <script type="application/x-javascript">
    function drawText() {
      var canvas = document.getElementById("canvas");
      if (canvas.getContext) {
        var ctx = canvas.getContext("2d");
        var message = "First HTML5 page"

        ctx.fillStyle = "#FF0000";
        ctx.font = "30px serif";
		var xPosition = 20;
		var yPosition = 30;
        
        ctx.fillText (message,xPosition,yPosition);
      }
    }
  </script>

 <body onload="drawText();">
   <canvas id="canvas" width="300" height="300"></canvas>
 </body>

html5.png

在以后的文章中,我们会讨论HTML5的其它功能和在手机上的应用方式。

转自:http://community-china.developer.motorola.com/t5/MOTODEV-%E5%8D%9A%E5%AE%A2/%E4%BD%BF%E7%94%A8HTML5%E5%BC%80%E5%8F%91Android%E6%9C%AC%E5%9C%B0%E5%BA%94%E7%94%A8-%E4%B8%80/ba-p/1742


分享到:
评论

相关推荐

    Android应用开发新路线

    利用HTML5开发Android应用程序! Android的HTML5应用程序概述 如何适配多分辨率的Android设备? 如何在Android中构建HTML5应用程序? 如何在Android中调试HTML5应用程序? 如何在Android中使用HTML5的本地储存? ...

    基于html5的android开发

    Android与HTML5融合 ...如何在Android中使用HTML5的本地储存? 如何在Android中使用HTML5的本地数据库? 如何在Android中使用HTML5的地理定位? 如何在Android中构建HTML5离线应用? 如何使用Canvas进行绘图?

    Android开发应用实战详解源代码

    2.8.3 android本地广播 2.9 小结 第3章 设备界面演练 3.1 文字标签处理 3.2 改变屏幕窗口元素的背景颜色 3.3 改变textview的文字颜色 3.4 实现textview文字的替换 3.5 获取手机分辨率 3.6 样式修饰处理 3.7 按钮事件...

    Android应用开发报告.docx

    Android应用开发报告 Android应用开发报告全文共10页,当前为第1页。Android应用开发报告全文共10页,当前为第1页。Android应用开发报告 Android应用开发报告全文共10页,当前为第1页。 Android应用开发报告全文共10...

    基于html5的android开发教程解释

    Android的HTML5应用程序概述 ...如何在Android中使用HTML5的本地储存? 如何在Android中使用HTML5的本地数据库? 如何在Android中使用HTML5的地理定位? 如何在Android中构建HTML5离线应用? 如何使用Canvas进行绘图?

    《Android应用开发》个人总结报告.doc

    《Android应用开发》个人总结报告 刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构 ,更加方便,视觉上也是非常的酷,在前期我通过的大量的Android SDK开发范例大全中的例子以及...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    鉴于市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本,本文采用Android+HTML5相结合的方式进行移动端Web系统的设计研发工作...

    Android开发教程之使用 HTML 5 开启移动 Web 应用程序的本地存储--千锋培训

    文档介绍了简介,先决条件,本地存储基础,Storage API,例子:利用本地存储实现高速缓存,清单 1. 最基本的 Twitter 搜索,本地保存,清单 2. 搜索和保存,快速本地数据加载,清单 3. 首先进行本地搜索,清单 4. ...

    Android代码-安卓结合HTML5快速开发APP

    2,这是我结合Android与H5技术,利用webview,viewpager与PagerSlidingTab,文章均来自于微信热文精选。 3,webview本地缓存,没有网时也能浏览之前加载过的新闻 4,activity里用viewpager,viewpager的每个条目都是...

    Google Android SDK开发范例大全(完整版)

    虽然没有 Eclipse 和 Android Developer Tools 插件也可以开发 Android 应用程序,但是那样就需要熟悉 Android SDK。 Android SDK 是作为一个 ZIP 文件发布的,可以将该文件解压到硬盘上的一个目录中。由于有多个 ...

    HTML5移动Web开发指南.pdf

    如果你有一定的HTML开发经验,将会更容易掌握HTML5知识。 同时,如果你是如下几类人群之一,那么本书非常适合你阅读。 有一定基础或者未来计划的职业是Web前端开发工程师。 具有一定HTML基础的UI设计师。 Web项目中...

    使用HTML5技术制作在线PDF阅读器(附源码)

    建议开发童鞋使用统一开发环境UDE来进行查看、调试、开发~~~统一开发环境是一款HTML5跨平台一站式应用开发、调试和部署工具。通过整合多种手机应用的开发包(SDK)及对应的Eclipse Plugin、跨平台中间件、中国移动...

    使用HTML5设计网络富客户端应用

    新的强大的多媒体和交互功能的HTML5,...7、Web应用程序扩展到移动设备,如iPhone,Android和HTML5的2.0 WebOS手机 8、实现Web应用程序中的API的地理定位 9、采用类似于SQL的本地数据存储到您的网络解决方案

    HTML5+JS 画图板源码分享

    建议开发童鞋使用跨平台开发工具——统一开发环境UDE来进行查看、调试、开发哦~~它是一款HTML5跨平台一站式应用开发、调试和部署工具, 支持HTML5跨平台开发,原Java跨平台插件支持Android/Symbian/Kjava的跨平台和...

    Android UI组件实例集合

    为Android应用开发提供一个轻量级开发框架,让开发者可以基于HTML/CSS/JAVASCRIPT快速开发android应用界面,同时也能够利用mobilelite调用android后台的服务。 18、Android瀑布流实例 android_waterfall 实现了类似...

Global site tag (gtag.js) - Google Analytics