《PhoneGap精粹:构建跨平台的移动App》——1.3节PhoneGap工作机制

1.3 PhoneGap工作机制
PhoneGap精粹:构建跨平台的移动App
正如之前提到的,PhoneGap让开发人员可以使用Web技术(HTML、CSS和JavaScript)为移动设备(智能机和平板电脑)构建原生的应用程序。一名开发人员为移动设备构建Web应用程序,然后使用PhoneGap提供的特殊工具将Web应用程序打包成各个平台的原生应用程序。图1-1揭示了这个打包的过程,在本章后面的部分我们会详细解释其中的细节。

在打包出来的原生应用程序中,该应用程序的用户界面主要由一个满屏显示的web视图构成。当启动应用程序时,该应用程序会将Web应用程序的启动页(通常是index.html,但你也可以修改为其他的页面)加载到Web视图中,然后将用户操作传入Web视图中,让用户可以与Web应用程序交互。当用户与应用程序的内容(即Web应用程序)交互时,应用程序中的链接或者JavaScript代码可以从随应用程序打包的资源文件中加载其他内容,当可以访问网络时,也可以从Web服务器或者应用程序服务器上获取内容。

对于某些移动平台来说,比如bada、Symbian和webOS,原生应用程序就是Web应用程序。它们没有编译成原生应用程序,然后部署到设备的概念。取而代之的是在设备上运行一个被专门打包的Web应用程序。在后续的章节中,我们会更详细地介绍。

Web视图

Web视图是一个原生应用程序组件,该组件用于显示原生应用程序中的Web内容(通常是HTML页面)。在移动设备中,Web视图本质上是一个可以通过编程方式访问的内置Web浏览器的封装器。

比如,在BlackBerry平台上,Web视图被实现为一个Browser Field对象(使用net.rim. device. api. browser.filed2)。在Android上,通过WebView视图(android.webkit. WebView)实现,还有在iOS上,它是UIWebView(System/Library/Frameworks/UIKit. framework)。
Web应用程序运行在Web视图这个容器中,就像Web应用程序运行在移动Web浏览器中。Web视图也可以显示其他(本地或远程Web服务器上)的HTML页面;内嵌在应用程序中的JavaScript实现了所需的应用程序逻辑、根据页面需要显示或隐藏内容、播放多媒体文件、打开新的页面、执行运算以及向服务器收发内容。应用程序的外观和体验可以通过CSS或者直接在HTML元素中添加设置来实现,比如线、间距、色彩或底纹等属性。在页面中使用图形元素也可以为应用程序提供更好的外观。任何可以通过Web应用程序实现的功能,你都可以用PhoneGap应用程序实现。

通常来说,移动Web浏览器无法像设备上的其他应用程序(比如,通讯录(Contacts)应用程序)那样访问设备端的组件和硬件(加速度计、摄像头、罗盘、麦克风等)。但是典型的原生移动应用程序是会经常使用这些组件的。为了能够创造出有趣的移动应用程序,我们的移动应用程序需要访问这些web容器之外的原生设备组件。PhoneGap提供了一套JavaScript API来满足这些需要,开发人员可以使用这些JavaScript API让运行在PhoneGap应用程序容器中的Web应用程序访问这些设备组件。图1-2在一个较高的层次上说明了其中的原理。

当开发人员在应用程序中使用PhoneGap实现某个功能时,该应用程序会通过JavaScript调用PhoneGap API,然后应用程序的某个特殊的层会将对PhoneGap API的调用翻译成对应的原生API。比如在BlackBerry上调用摄像头的方法就和在Android上的不一样,所以这个API公共层让开发人员可以对不同平台使用同一接口,该接口会在作为容器的应用程序中被翻译成对应平台的原生API。让我们来看下使用PhoneGap的应用程序,JavaScript代码看上去应该像下面这样:

navigator.camera.getPicture( onSuccess, onFail );

这里我们传入了两个回调函数作为参数:onSuccess和onFail(在后面的章节中我们会详细解释)。

在BlackBerry上,上面这段代码相当于在后端执行了下面的代码:

Player player = Manager.createPlayer("capture://video");
player.realize();
player.start();
VideoControl vc = (VideoControl) player.getControl("VideoControl");
viewFinder = (Field)vc.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE,
       "net. rim.device.api.ui.Field");
scrnMain.add(viewFinder);
vc.setDisplayFullScreen(true);
String imageType ="encoding=jpeg&width=1024&height=768&quality=fine";
byte[] theImageBytes = vc.getSnapshot(imageType);
Bitmap image = Bitmap.createBitmapFromBytes(imageBytes, 0, imageBytes.length, 5);
BitmapField bitmapField = new BitmapField();
bitmapField.setBitmap(image);
scrnMain.add(bitmapField);
在Android上,对应的代码如下所示:

camera.takePicture( shutterCallback, rawCallback,jpegCallback );
以及在iOS上,代码如下所示:

UIImagePickerController *imgPckr =[[UIImagePickerController alloc] init];
imgPckr.sourceType = UIImagePickerControllerSourceTypeCamera;
imgPckr.delegate = self;
imgPckr.allowsImageEditing = NO;
[self presentModalViewController:imgPckr animated:YES];

虽然这里列出的示例代码并没有涵盖获取图片过程的所有方面(比如处理错误或者处理返回的图片),但是这个示例向我们展示了PhoneGap是如何简化跨平台移动开发的。在PhoneGap支持的移动平台间,开发人员可以使用一个通用的API,PhoneGap会将这次调用翻译成每个平台对应的原生API。这使得开发人员无需掌握大量潜在的技术,让他们可以更专注于应用程序本身而不是如何在不同设备上实现。

目前,PhoneGap支持以下API:

 Accelerometer(加速度计)
 Camera(摄像头)
 Capture(捕获)
 Compass(罗盘)
 Connection(连接)
 Contacts(通讯录)
 Device(设备)
 Events(事件)
 File(文件)
 Geolocation(地理位置)
 Media(多媒体)
 Notification(通知)
 Storage(存储)
随着新标准的演变,PhoneGap项目团队会不断提出其他的API。PhoneGap对于API的实现倾向根据W3C的Device APIs and Policy(DAP)Working Group(www.w3.org/2009/dap)的规范进行实现。该小组致力于“创造一种客户端API,通过该API可以在开发Web应用程序和Web元件时和设备服务(比如日历、通讯录、摄像头等)交互。随着DAP API越来越规范,PhoneGap将会实现DAP API。

随着时间的推移,当移动设备浏览器完全实现DAP API时,PhoneGap就会失去价值。当所有移动浏览器都支持DAP API时,就没有什么功能是需要PhoneGap提供的了,同时PhoneGap也将消失。

Apple和PhoneGap

在iOS应用程序中,Apple对能做什么和不能做什么有着严格的限制。在2009年9月,Apple通过了PhoneGap应用程序(使用PhoneGap框架的0.8版本)。如今,在Apple App Store中已经有许多PhoneGap应用程序了。

时间: 2024-11-01 07:38:10

《PhoneGap精粹:构建跨平台的移动App》——1.3节PhoneGap工作机制的相关文章

《PhoneGap精粹:构建跨平台的移动App》——1.8节PhoneGap插件

1.8 PhoneGap插件 PhoneGap精粹:构建跨平台的移动App 我们经常会遇到现有解决方案提供的基本功能无法满足某些需求的情况,这点PhoneGap和其他开发工具是一样.为了解决这个问题,PhoneGap支持使用额外功能去扩展PhoneGap应用程序.你可以在http://wikiphonegap.com/w/page/36752779/PhoneGap%20Plugins上找到更多关于PhoneGap插件的信息. PhoneGap的开发人员社区非常活跃.当开发人员在PhoneGap

《PhoneGap精粹:构建跨平台的移动App》——1.11节混合应用程序框架

1.11 混合应用程序框架 PhoneGap精粹:构建跨平台的移动App 使用PhoneGap制作混合应用程序在整个市场里并不是唯一的.虽然PhoneGap引领了潮流,但市场上还有一些使用类似方法的其他产品.在下面的部分中我们将说明这点.另外,能用来制作混合移动应用程序的产品不止下面的这些. 1.11.1 Appcelerator Titanium Titanium也是一个开源的混合应用程序框架.正当PhoneGap获得移动开发人员推崇的时候,Appcele- rator(www.appcele

《PhoneGap精粹:构建跨平台的移动App》——1.10节PhoneGap资源

1.10 PhoneGap资源PhoneGap精粹:构建跨平台的移动App你可以在以下几个网站找到关于如何使用PhoneGap框架的详细信息. PhoneGap官网:www.phonegap.comPhoneGap维基:http://wiki.phonegap.comGoogle Groups:http://groups.google.com/group/phonegapPhoneGap博客:www.phonegap.com/blog

《PhoneGap精粹:构建跨平台的移动App》——1.9节PhoneGap提供的支持

1.9 PhoneGap提供的支持PhoneGap精粹:构建跨平台的移动App对于公司来说,他们通常会在意在他们的商业应用程序中使用的软件产品是否提供支持.开源产品,比如OpenOffice.org(http://openoffice.org)和Linux,如果它们不提供支持,这些产品是不可能在企业中广泛应用的.OpenOffice.org可以在Oracle那里获得商业支持,Linux则可以在Red Hat.Cannonical.SUSE或其他公司那里获得商业支持,正因为可以从这些地方获得商业支

《PhoneGap精粹:构建跨平台的移动App》——1.5节编写PhoneGap应用程序

1.5 编写PhoneGap应用程序PhoneGap精粹:构建跨平台的移动App正如前面所说,PhoneGap应用程序是通过普通的web技术(比如HTML.CSS和JavaScript)构建的.凡是你可以使用标准的web技术实现的功能,你都可以在PhoneGap应用程序中实现.使用PhoneGap框架提供的JavaScript,PhoneGap应用程序可以比普通的web应用程序实现更多的功能. 为了构建PhoneGap应用程序,你需要用到你的编辑器和编写代码.为了让事情简化,Windows上你可

《PhoneGap精粹:构建跨平台的移动App》——1.1节PhoneGap简史

1.1 PhoneGap简史PhoneGap精粹:构建跨平台的移动App在2008年的iPhoneDevCamp上,Nitobi(www.nitobi.com)提出了一个简化跨平台移动开发的项目,于是PhoneGap诞生了.该项目最初只是一个开发团队通过一个周末创造出来的框架的结构.通过核心功能以及原生应用程序容器在iPhone上呈现Web应用程序的内容.在有了最初的框架之后,PhoneGap团队很快便支持了Android,随后又支持了BlackBerry. 2009年,PhoneGap在Web

《PhoneGap精粹:构建跨平台的移动App》——1.7节PhoneGap的局限性

1.7 PhoneGap的局限性PhoneGap精粹:构建跨平台的移动App使用PhoneGap创建移动应用程序还是有一些局限性的.作为一个开源项目,PhoneGap能否适时地发布新功能以及修复bug,这些都取决于PhoneGap项目的志愿者. 即使PhoneGap的发展规划做得很好,但也只有当PhoneGap有足够资源(使用不同平台的相关技能)时才会按规划的那样发展.那些流行的平台(比如Android和iPhone)上的功能发布和修复bug会更受关注,然而那些非主流的平台就不会那么受关注了.举

《PhoneGap精粹:构建跨平台的移动App》——1.1节PhoneGap简介

第1章 PhoneGap简介PhoneGap精粹:构建跨平台的移动AppPhoneGap是一个开源框架,你可以通过它使用HTML.CSS以及JavaScript创建跨平台的原生移动应用程序.这种移动应用程序称为混合应用程序(hybird application).一群开发人员创造了PhoneGap用来简化移动开发,使用PhoneGap框架的人也增长迅猛. 就如PhoneGap官网(www.phonegap.com )上说的,"PhoneGap是一个开放标准的开源实现".PhoneGap

《PhoneGap精粹:构建跨平台的移动App》——1.2节为什么使用PhoneGap

1.2 为什么使用PhoneGapPhoneGap精粹:构建跨平台的移动App以下是几个使用PhoneGap构建移动应用程序的理由. 你的移动应用程序已经使用了Web技术构建,同时你希望可以将这个Web应用程序部署到一个或多个移动应用程序商店(比如Android Market,Apple App Store或者BlackBerry App World).你希望可以利用Web开发技术去构建一个移动应用程序,但需要调用设备端的功能(比如摄像头或者日历等),这些都是移动浏览器不支持的.你希望快速构建一