Hybrid App 开发初探:使用 WebView 装载页面

简介:

 Hybrid App 是混合模式应用的简称,兼具 Native App 和 Web App 两种模式应用的优势,开发成本低,拥有 Web技术跨平台特性。目前大家所知道的基于中间件的移动开发框架都是采用的 Hybrid 开发模式,例如国外的PhoneGap、Titanium、Sencha,还有国内的 AppCan、Rexsee 等等。Hybrid App 开发模式正在被越来越多的公司和开发者所认同,相信将来会成为主流的移动应用开发模式。

  

 

  Hybrid App 融合 Web App 的原理就是嵌入一个WebView组件,可以在这个组件中载入页面,相当于内嵌的浏览器,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import  android.app.Activity;
import  android.os.Bundle;
import  android.webkit.WebSettings;
import  android.webkit.WebView;
 
public  class  AActivity  extends  Activity{
     
     @Override
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         // 创建WebView
         WebView webView=  new  WebView( this );
         // 切换到内容视图
         setContentView(webView);
         // 获取WebView配置
         WebSettings ws = webView.getSettings();
         // 启用JavaScript
         ws.setJavaScriptEnabled( true );
         // 载入assets目录下的一个页面
         webView.loadUrl( "file:///android_asset/www/BoBox/index.html" );
     }
}

  还有另一种引入方式是在布局文件中添加 WebView 组件,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<? xml  version = "1.0"  encoding = "utf-8" ?>
< LinearLayout  xmlns:android = "http://schemas.android.com/apk/res/android"
     android:orientation = "vertical"
     android:layout_width = "fill_parent"
     android:layout_height = "fill_parent" >
     
     < WebView 
         android:layout_width = "fill_parent"
         android:layout_height = "wrap_content"
         android:id = "@+id/webview"
         />
         
</ LinearLayout >
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import  android.app.Activity;
import  android.os.Bundle;
import  android.webkit.WebSettings;
import  android.webkit.WebView;
 
public  class  BActivity  extends  Activity{
 
     @Override
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.webview);
         // 查找WebView
         WebView webView = (WebView) findViewById(R.id.webview);
         // 获取WebView配置
         WebSettings ws = webView.getSettings();
         // 启用JavaScript
         ws.setJavaScriptEnabled( true );
         // 在载入assets目录下的一个页面
         webView.loadUrl( "file:///android_asset/www/index.html" );
     }
}

  WebView 还有一个非常重要的方法——addJavascriptInterface,可以用来实现 Java 程序和 JavaScript 程序的相互调用,代码如下:

?
1
2
3
4
5
6
7
8
9
webView.addJavascriptInterface( new  Object(){
     public  void  clickOnAndroid(){
         mHandler.post( new  Runnable(){
             public  void  run(){
                 webView.loadUrl( "javascript:wave()" );
             }
         });
     }
},  "demo" );

  页面代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
< script >
     function wave() {
         document.getElementById("id").innerHTML = "Hello World!";
     }
</ script >
</ head >
< body >
     < div >
         < a  href = "#"  id = "demo"  onclick = "window.demo.clickOnAndroid()" >Click Me</ a >
     </ div >
</ body >
</ html >

  这样,当你点击页面上 Click Me 按钮的时候就会调用 Java 代码中的 clickOnAndroid 函数,clickOnAndroid 函数中又调用页面中的 wave 方法。需要注意的是:这个接口在 Android 2.3 版本的模拟器中运行会导致 WebView 崩溃,目前还没有修复。这是一个非常简单的演示 Java 和 JavaScript 相互调用的例子,在实际应用中可以在页面调用的 clickOnAndroid 函数中再调用摄像头、通讯录、通知提醒等设备功能。



本文转自山边小溪 51CTO博客,原文链接:http://blog.51cto.com/lihongbo/941153,如需转载请自行联系原作者


相关文章
|
机器学习/深度学习 传感器 人工智能
AI与未来医疗:重塑健康管理新格局随着人工智能(AI)技术的飞速发展,医疗行业正迎来一场前所未有的变革。AI不仅在数据分析、诊断支持方面展现出巨大潜力,还在个性化治疗、远程医疗等多个领域实现了突破性进展。本文将探讨AI技术在医疗领域的具体应用及其对未来健康管理的影响。
人工智能(AI)正在彻底改变医疗行业的面貌。通过深度学习算法和大数据分析,AI能够迅速分析海量的医疗数据,提供精准的诊断和治疗建议。此外,AI在远程医疗、药物研发以及患者管理等方面也展现出了巨大的潜力。本文将详细探讨这些技术的应用实例,并展望其对健康管理的深远影响。
|
编解码 监控 API
直播源怎么调用api接口
调用直播源的API接口涉及开通服务、添加域名、获取API密钥、调用API接口、生成推流和拉流地址、配置直播源、开始直播、监控管理及停止直播等步骤。不同云服务平台的具体操作略有差异,但整体流程简单易懂。
|
数据可视化 关系型数据库 MySQL
【MySQL】MySQL8.0 创建用户及授权 - 看这篇就足够了
本文介绍了在MySQL 8.0+版本中创建和管理用户的详细步骤,包括通过命令行进入MySQL、创建数据库、用户及授权等操作,并提供了具体命令示例。适合初学者参考学习,帮助实现系统的权限管理和安全控制。
7733 3
【MySQL】MySQL8.0 创建用户及授权 - 看这篇就足够了
|
Java 关系型数据库 MySQL
DataX教程(10)- DataX插件热插拔原理
DataX教程(10)- DataX插件热插拔原理
1219 0
|
SQL 数据挖掘 数据库
SQL计算班级语文平均分:详细步骤与技巧
在数据库管理中,经常需要统计和查询各种汇总信息,如班级某科目的平均分
|
安全 算法 开发工具
【C 言专栏】基于 C 语言的嵌入式系统开发
【5月更文挑战第1天】本文探讨了C语言在嵌入式系统开发中的核心作用。嵌入式系统作为专用计算机系统广泛应用于家电、汽车、医疗等领域,具备实时性、低功耗等特点。C语言因其高效性、可移植性和灵活性成为开发首选。文章介绍了开发流程,包括需求分析、硬件选型、软件设计至部署维护,并强调中断处理、内存管理等关键技术。C语言在智能家居、汽车电子和医疗设备等领域的应用实例展示了其广泛影响力。面对硬件限制、实时性要求和安全挑战,开发者需不断优化和适应新技术趋势,以推动嵌入式系统创新发展。
464 0
【C 言专栏】基于 C 语言的嵌入式系统开发
|
机器学习/深度学习 数据采集 数据挖掘
如何在Python中使用线性回归进行房价预测
线性回归是一种常见的机器学习模型,可以用于预测连续变量的值。在房产市场中,房价预测是一个重要的问题。本文将介绍如何使用Python中的线性回归模型来进行房价预测,包括数据集准备、模型训练和预测等方面的详细步骤和示例。
|
机器学习/深度学习 弹性计算 供应链
阿里云服务器是如何计费的?包年包月按量付费抢占式实例适用于什么场景?
阿里云服务器是如何计费的?本文通过介绍包年包月、按量付费、抢占式实例三种收费模式的计费方式、适用资源和费用计算,来告知我们阿里云服务器不同的收费方式分别适用于什么场景?
1563 0
阿里云服务器是如何计费的?包年包月按量付费抢占式实例适用于什么场景?
|
Unix Linux Apache
【Linux必知必会】五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 最初来自:http://www.sinoprise.com/read.php?tid-662-page-e-fpage-1.html (遗憾的是这个链接已经打不开了),我基本未改动,只是进行了一些排版和整理。
2033 0
|
Shell 开发工具 数据安全/隐私保护
如何创建gitee仓库并上传文件到仓库
如何创建gitee仓库并上传文件到仓库
如何创建gitee仓库并上传文件到仓库