`
longgangbai
  • 浏览: 7377791 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

『转』搭建基于 PhoneGap 框架的 Mobile 应用

 
阅读更多

Mobile应用基于PhoneGap框架搭建教程是本文要介绍的内容,主要是来学习PhoneGap框架的应用,随着Google的Android手机和苹果的iPhone手机成为手机市场的主流,越来越多的开发者加入到移动应用开发的大军中,但是基于JavaAndroid应用和基于C语言的iPhone应用让开发者开发应用的时候甚为烦恼,同样的应用必须用不同的语言开发两次才能支持不同的手机平台。

为了进一步简化移动应用的开发,Nitobi公司推出了一套开源的移动应用解决方案PhoneGap。本文主要介绍PhoneGap的基础知识,并通过一个示例介绍PhoneGap开发测试环境的搭建以及PhoneGap项目的开发和部署,并对PhoneGap提供的主要API做简单介绍.

PhoneGap简介

PhoneGap是一款基于HTML5的开源的手机应用开发框架,它允许用户仅仅通过Web(HTML、JavaScript)技术就可以访问移动设备的本地应用、API以及应用程序库等。PhoneGap提供了一系列丰富的API供开发者调用,这些API抽象和简化了移动设备本身提供的复杂的API,使开发新的手机应用和调用已有的手机功能更简单方便。另外,PhoneGap真正实现了writtenonce,runeverywhere,并且它采用了W3C标准,能和jQueryMobile结合在一起使用。

PhoneGap特性

目前,PhoneGap已实现对iPhone/iPad、Android、Symbian、Palm、黑莓各版本绝大部分功能的支持,其中官方文档中对其支持的详细说明如图1所示:

图1.PhoneGapAPI对各手机平台的支持

PhoneGap API对各手机平台的支持

PhoneGapAPI简介

Accelerometer

Accelerometer是一个设备移动感应器,它能够检测到设备相对于原来位置的移动,并用三维坐标x,y,z表示。该API提供三个方法:

accelerometer.getCurrentAcceleration:得到用x,y,z值表示的当前设备的移动加速度。

accelerometer.watchAcceleration:以特定的时间间隔得到用x,y,z值表示的当前设备的移动加速度。

accelerometer.clearWatch:取消对设备移动加速度的监控。

Camera

Camera提供了访问和操作移动设备的默认摄像头的API,包括用摄像头动态摄取图片或从移动设备的相册中获取图片。

camera.getPicture():该方法通过配置不同的参数实现动态用摄像头获取图片或从已有的相册中获取图片,返回参数也可以根据设置不同的参数返回图片的二进制数据或者图片的路径。

Compass

Compass提供了获取移动设备指向的API。

compass.getCurrentHeading:获取当前移动设备的指向。

compass.watchHeading:以特定的时间间隔获取当前设备的指向。

compass.clearWatch:取消对当前设备指向的监控。

Contacts

Contacts提供了访问和操作移动设备通讯录数据库的API,包括获取联系人列表(支持过滤条件),增加,删除,编辑通讯录联系人等。

contacts.create:创建一个新的联系人。

contacts.find:查找联系人。

Contacts模块包括几个重要的对象:Contact,ContactName,ContactField,ContactAddress,ContactOrganization,ContactFindOptions,ContactError,通过这些对象和create、init方法共同实现对通讯录的复杂操作,详细的介绍可以参考PhoneGap的官方文档。

Device

Device提供了访问当前移动设备参数的API,包括设备名、设备系统版本、设备平台等。

File

File提供了访问和操作移动设备文件系统的API,其中FileReader和FileWriter提供了对设备文件的读写API。

GeoLocation

GeoLocation提供了访问移动设备的GPS感应器的API。

Media

Media提供了访问和操作移动设备语音文件的API,包括播放、停止、录音等。

NetWork

Network提供了访问移动设备移动网络和无线网络设置的API。

Notification

Notification提供了一组API来模拟移动设备的一些可视(对话框)、可听(提示音)、可感觉(震动)的功能。

notification.alert:弹出警告或者对话框。

notification.confirm:弹出确认框。

notification.beep:播放设备的提示音。

notification.vibrate:使设备震动一段时间。

Storage

Store提供了访问移动设备的存储设备的API。

 

搭建PhoneGap开发化境

PhoneGap支持开发适用于iPhoneAndroid、Palm等不同平台的应用,对不同的平台开发环境也有所不同,本文以Android为例搭建开发环境和创建应用。在搭建环境之前,我们需要先下载一些必须的工具和SDK,所有的工具都可以免费下载:

下载并安装Eclipse3.4+。

下载并安装Android SDK。

下载并安装ADTPluginforEclipse。

下载并解压PhoneGap

安装好Eclipse、AndroidSDK和ADT插件之后,还需要做一些简单的配置才可以创建项目。图2显示了如何在Eclipse里配置AndroidSDK的路径,图3和图4显示了如何在Eclipse里配置AVD(AndroidVirtualDevice)。

图2.在Eclipse里配置AndroidSDK路径

图 2:在 Eclipse 里配置 Android SDK 路径

图3.AndroidSDKandAVDManager菜单

图 3:Android SDK and AVD Manager 菜单

图4.在Eclipse里配置AVD

图 4:在 Eclipse 里配置 AVD

如果需要使用Android手机测试应用,还需要安装手机对应型号的驱动器,把手机和开发机器用USB线连接,并且正确设置手机的开发调试功能。(Settings>Applications>Development)

 

创建一个简单的PhoneGap应用

创建一个新Android工程,如图5所示:

图5.创建新Android工程

 

图 5:创建新 Android 工程

 

完善项目结构

在项目根目录下创建/libs和/assets/www目录,并从解压后的PhoneGap目录中拷贝phonegap.js(可能带有版本信息)到/assets/www目录下,拷贝phonegap.jar(可能带有版本信息)到libs目录。修改项目的JavaBuildPath信息,把libs下的jar文件包含在编译路径中。

修改项目文件实现简单的获取设备联系人列表功能

com.phonegap.App.java

更改App.java文件为清单1的内容:

清单1.App.java类

  1. packagecom.phonegap.sample;  
  2. importandroid.app.Activity;  
  3. importandroid.os.Bundle;  
  4. importcom.phonegap.*;  
  5. publicclassAppextendsDroidGap{  
  6. /**Calledwhentheactivityisfirstcreated.*/  
  7. @Override  
  8. publicvoidonCreate(BundlesavedInstanceState){  
  9. super.onCreate(savedInstanceState);  
  10. //loadtheindex.htmlpagewhenappisloaded.  
  11. super.loadUrl("file:///android_asset/www/index.html");  
  12. }  

AndroidManifest.xml

把清单2的内容拷贝到AndroidManifest.xml文件的manifest标签内,并拷贝android:configChanges="orientation|keyboardHidden到activity标签内做为activity标签的一个属性。

清单2.AndroidManifest.xml

 

<supports-screens 
android:largeScreens="true" 
android:normalScreens="true" 
android:smallScreens="true" 
android:resizeable="true" 
android:anyDensity="true" 
/> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

 


index.html页面

在/assets/www目录下创建一个新的HTML页面命名为index.html,并拷贝清单3的内容到index.html文件。

清单3:Index.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>PhoneGap</title> 
 <link rel="stylesheet" href="master.css" type="text/css" media="screen" 
 title="no title" charset="utf-8" > 
 <script type="text/javascript" charset="utf-8" src="phonegap.0.9.4.js" 
 ></script> 
 <script type="text/javascript" charset="utf-8" > 
 //show device information 
 var deviceInfo = function (){      
     document.getElementById("platform").innerHTML = device.platform; 
     document.getElementById("version").innerHTML = device.version; 
     document.getElementById("uuid").innerHTML = device.uuid; 
     document.getElementById("name").innerHTML = device.name; 
     document.getElementById("width").innerHTML = screen.width; 
     document.getElementById("height").innerHTML = screen.height; 
     document.getElementById("colorDepth").innerHTML = screen.colorDepth; 
    }; 
      //listen the device ready event and get the device information. 
 function init(){ 
document.addEventListener("deviceready", deviceInfo, true ); 
	 } 

 // get device contacts list by the contacts API. 
 function get_contacts() 
	 { 
var obj = new ContactFindOptions(); 
obj.filter=""; 
obj.multiple=true ; 
obj.limit=5; 
navigator.service.contacts.find(["name","displayName", "phoneNumbers", 
"emails"],contacts_success, fail, obj); 
	 } 

function fail(fail) 
    { 
      alert(fail); 
    } 
function contacts_success(contacts) 
 { 
var result = ""; 
for (var i=0;i<contacts.length;i++) 
		 { 
result += "Name: " + contacts[i].name.givenName + ", displayName: "+ 
contacts[i].displayName + ",Email:" + contacts[i].emails[0].value; 
result += "<br>"; 
		 } 
document.getElementById("conlist").innerHTML = result; 
alert(contacts.length + ' contacts returned.' ); 
	 } 
 </script>  

 </head> 
 <body onload="init();" id="stage" class="theme" > 
   <h1>Welcome to PhoneGap!</h1> 
   <h2>this file is located at assets/index.html</h2> 
   <div id="info" > 
       <h4>Platform: <span id="platform" > &nbsp;</span>,
       Version: <span id="version" >&nbsp;</span></h4> 
       <h4>UUID: <span id="uuid" > &nbsp;</span>, 
       Name: <span id="name" >&nbsp;</span></h4> 
       <h4>Width: <span id="width" > &nbsp;</span>,
       Height: <span id="height" >&nbsp; 
       </span>, Color Depth: <span id="colorDepth" ></span></h4> 
    </div>    
   <a href="#" class="btn large" onclick="get_contacts();">
   Get phone's contacts</a> 
    <a href="http://w3.ibm.com/w3odw/spg/index_default.html" class="btn large"
      >Access IBM Home Page</a> 
   <form action="http://x.x.x.x:8080/WebTest/index.jsp" method="get" > 
Username: <input type="text" name="name" /> 
<input type="submit" /> 
</form> 
   <div id="conlist" > 
   </div>     
 </body> 
</html> 

 

 

 

 

 


注意:中的“x.x.x.x”应为运行着一个contextroot为WebTest的Web应用的主机地址(IP或者HostName),WebTest项目可从本文档提供的链接中下载。

测试项目

在项目上点击右键,在出现的菜单中选择“RunAs”,然后选择“AndroidApplication”,Eclipse会弹出窗口让你选择合适的AVD,如果还没有配置,请参照“搭建PhoneGap开发环境”小节介绍的方法创建一个AVD。如果选择用Android手机测试程序,请确认驱动已经装好,USB连接正常,并且正确设置手机的开发调试选项,然后选择“RunAs--AndroidApplication”。

 

运行结果展示

图6显示了该实例在AVD上的运行结果。

图6.示例运行结果

图 6:示例运行结果

点击“Getphone’scontacts”会出现图7和图8所示的结果:

图7.示例运行结果(对话框)

图 7:示例运行结果(对话框)

图8.示例运行结果(联系人信息)

图 8:示例运行结果(联系人信息)

点击“AccessIBMHomePage”将会出现图9所示的画面:

图9.显示IBM主页画面

图 9:显示 IBM 主页画面

在图6的输入框中输入“Rendy”,然后点击“Submit”按钮,会出现图10所示的页面:

图10.提交用户名后显示画面

图 10:提交用户名后显示画面

从上面的示例可以看到,开发人员只需掌握HTML和JavaScript就可以开发基于PhoneGap的可以和移动设备的本地应用交互的手机Web应用,极大的简化了移动应用的开发周期。

本文对PhoneGap开源框架做了简单介绍,并通过一个示例介绍了如何开发基于PhoneGap框架的可以和移动设备的本地应用交互的MobileWeb应用。PhoneGap以它开发简单、兼容性好、支持标准化等无与伦比的优势正在不断的占据移动应用开发的市场,虽然它也存在运行速度慢、UI反应延时等问题,但是随着技术的进步,这些不足会不断的改进和消除。

 

部署和运行示例代码

下载代码到本地计算机,打开Eclipse,点击File->import->ExistingProjectsintoWorkspace如图7所示,选择archivefile并指定到代码所在的本地路径(图11),点击Finish按钮。

图11.导入工程到Eclipse

图 11:导入工程到 Eclipse

图12.导入Archive文件

图 12:导入 Archive 文件

工程导入Eclipse后会自动编译,右键点击项目选择RunAsAndroidApplication就可以运行程序。

用同样的方法将WebTest项目导入Eclipse工作空间中,右键点击项目选择RunAsRunOnServer。

小结:Mobile应用基于PhoneGap框架搭建教程的内容介绍完了,希望通过本文的学习能对你有所帮助!

 

 

下载

 

描述 名字 大小 下载方法
示例代码 SampleAndroidProject.zip 340KB HTTP
WebTest 项目代码 WebTest.zip 6KB HTTP

关于下载方法的信息

 

分享到:
评论

相关推荐

    少儿编程scratch项目源代码文件案例素材-绝地求生.zip

    少儿编程scratch项目源代码文件案例素材-绝地求生.zip

    嵌入式八股文面试题库资料知识宝典-文思创新面试题2010-04-08.zip

    嵌入式八股文面试题库资料知识宝典-文思创新面试题2010-04-08.zip

    一种基于剪切波和特征信息检测的太阳斑点图融合算法.pdf

    一种基于剪切波和特征信息检测的太阳斑点图融合算法.pdf

    并联型APF有源电力滤波器Matlab Simulink仿真:dq与αβ坐标系下的谐波无功检测与PI控制及SVPWM调制

    内容概要:本文详细介绍了并联型有源电力滤波器(APF)在Matlab/Simulink环境下的仿真研究。主要内容涵盖三个关键技术点:一是dq与αβ坐标系下的谐波和无功检测,利用dq变换和FBD技术实现实时检测;二是两相旋转坐标系(dq)与两相静止坐标系(αβ)下的PI控制,通过调整比例和积分环节实现精准控制;三是SVPWM调制方式的应用,通过优化开关时序提升系统效率和性能。文中还提供了详细的仿真介绍文档,包括模型搭建、参数设定以及结果分析。 适合人群:从事电力电子、自动化控制领域的研究人员和技术人员,尤其是对电力滤波器仿真感兴趣的读者。 使用场景及目标:适用于需要深入了解并联型APF工作原理和实现方式的研究人员,旨在通过仿真工具掌握谐波和无功检测、PI控制及SVPWM调制的具体应用。 其他说明:本文不仅提供了理论知识,还结合了实际操作步骤,使读者能够通过仿真模型加深对APF的理解。

    Arduino KEY实验例程【正点原子ESP32S3】

    Arduino KEY实验例程,开发板:正点原子EPS32S3,本人主页有详细实验说明可供参考。

    嵌入式八股文面试题库资料知识宝典-嵌入式C语言面试题汇总(66页带答案).zip

    嵌入式八股文面试题库资料知识宝典-嵌入式C语言面试题汇总(66页带答案).zip

    .archivetempdebug.zip

    .archivetempdebug.zip

    嵌入式系统开发_CH551单片机_USB_HID复合设备模拟_基于CH551单片机的USB键盘鼠标复合设备模拟器项目_用于通过CH551微控制器模拟USB键盘和鼠标输入设备_实现硬.zip

    嵌入式系统开发_CH551单片机_USB_HID复合设备模拟_基于CH551单片机的USB键盘鼠标复合设备模拟器项目_用于通过CH551微控制器模拟USB键盘和鼠标输入设备_实现硬

    少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip

    少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip

    少儿编程scratch项目源代码文件案例素材-火影.zip

    少儿编程scratch项目源代码文件案例素材-火影.zip

    两极式单相光伏并网系统的Boost电路与桥式逆变仿真及优化方法

    内容概要:本文详细介绍了两极式单相光伏并网系统的组成及其仿真优化方法。前级采用Boost电路结合扰动观察法(P&O)进行最大功率点跟踪(MPPT),将光伏板输出电压提升至并网所需水平;后级利用全桥逆变加L型滤波以及电压外环电流内环控制,确保并网电流与电网电压同频同相,实现高效稳定的并网传输。文中还提供了具体的仿真技巧,如开关频率设置、L滤波参数计算和并网瞬间软启动等,最终实现了98.2%的系统效率和低于0.39%的总谐波失真率(THD)。 适合人群:从事光伏并网系统研究、设计和开发的技术人员,特别是对Boost电路、MPPT算法、逆变技术和双环控制系统感兴趣的工程师。 使用场景及目标:适用于希望深入了解两极式单相光伏并网系统的工作原理和技术细节的研究人员和工程师。目标是在实际项目中应用这些理论和技术,提高光伏并网系统的效率和稳定性。 其他说明:文中提供的仿真技巧和伪代码有助于读者更好地理解和实现相关算法,在实践中不断优化系统性能。同时,注意电网电压跌落时快速切换到孤岛模式的需求,确保系统的安全性和可靠性。

    昭通乡镇边界,矢量边界,shp格式

    矢量边界,行政区域边界,精确到乡镇街道,可直接导入arcgis使用

    嵌入式八股文面试题库资料知识宝典-嵌入式c面试.zip

    嵌入式八股文面试题库资料知识宝典-嵌入式c面试.zip

    嵌入式八股文面试题库资料知识宝典-I2C总线.zip

    嵌入式八股文面试题库资料知识宝典-I2C总线.zip

    岩土工程中随机裂隙网络注浆模型及其应用:不同压力下注浆效果的研究

    内容概要:本文详细介绍了三种注浆模型——随机裂隙网络注浆模型、基于两相达西定律的注浆模型、基于层流和水平集的注浆扩散模型。首先,随机裂隙网络注浆模型基于地质学原理,模拟裂隙网络发育的实际地质情况,在不同注浆压力下进行注浆作业,以增强地基稳定性和提高承载能力。其次,基于两相达西定律的注浆模型利用数学公式模拟裂隙网络中的流体输送过程,适用于裂隙网络地质条件下的注浆效果分析。最后,基于层流和水平集的注浆扩散模型通过引入层流特性和水平集方法,更准确地模拟注浆过程中的扩散过程。文中还讨论了不同注浆压力对注浆效果的影响,并提出了优化建议。 适合人群:从事岩土工程、地基加固等相关领域的工程师和技术人员。 使用场景及目标:①帮助工程师选择合适的注浆模型和注浆压力;②为实际工程项目提供理论支持和技术指导;③提升地基加固的效果和效率。 其他说明:文章强调了在实际应用中需要结合地质条件、裂隙网络特点等因素进行综合分析,以达到最佳注浆效果。同时,鼓励不断创新注浆工艺和方法,以满足日益增长的地基加固需求。

    COMSOL Multiphysics 5.5与6.0版本Ar棒板粗通道流注放电仿真的电子特性分析

    内容概要:本文详细比较了COMSOL Multiphysics软件5.5和6.0版本在模拟Ar棒板粗通道流注放电现象方面的异同。重点探讨了不同版本在处理电子密度、电子温度、电场强度以及三维视图等方面的优缺点。文中不仅介绍了各版本特有的操作方式和技术特点,还提供了具体的代码实例来展示如何进行精确的仿真设置。此外,文章还讨论了网格划分、三维数据提取和电场强度后处理等方面的技术难点及其解决方案。 适合人群:从事等离子体物理研究的专业人士,尤其是熟悉COMSOL Multiphysics软件并希望深入了解其最新特性的研究人员。 使用场景及目标:帮助用户选择合适的COMSOL版本进行高效、精确的等离子体仿真研究,特别是在处理复杂的Ar棒板粗通道流注放电现象时提供指导。 其他说明:文章强调了在实际应用中,选择COMSOL版本不仅要考虑便捷性和视觉效果,还需兼顾仿真精度和可控性。

    嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_8.doc.zip

    嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_8.doc.zip

    通信系统中波形优化与捷变频、PRT抗干扰技术及ISRJ联合优化的应用研究

    内容概要:本文详细介绍了在现代通信系统中,抗干扰技术的重要性和具体应用方法。首先阐述了抗干扰技术的背景及其重要性,随后分别讨论了捷变频技术和波形优化技术的具体机制和优势。捷变频技术能快速改变工作频率,防止被干扰源锁定;波形优化技术则通过改进信号波形来提升抗干扰性能。接着,文章探讨了两种技术相结合的协同效应,最后重点介绍了发射信号及接收滤波器联合优化的抗干扰策略(ISRJ),这是一种综合性优化手段,旨在最大化抗干扰效果并提高通信质量。 适合人群:从事通信工程及相关领域的研究人员和技术人员,尤其是关注抗干扰技术的专业人士。 使用场景及目标:适用于需要提升通信系统稳定性和可靠性的场合,如军事通信、卫星通信等领域。目标是帮助技术人员理解和掌握先进的抗干扰技术,应用于实际项目中。 其他说明:文中提到的技术不仅限于理论层面,还涉及具体的实施细节和应用场景,有助于读者深入理解并应用于实践中。

    少儿编程scratch项目源代码文件案例素材-吉他英雄.zip

    少儿编程scratch项目源代码文件案例素材-吉他英雄.zip

    独立光伏系统仿真模型研究:Boost升压与双闭环控制策略及技术应用分析

    内容概要:本文详细探讨了独立光伏系统的仿真模型及其控制策略。首先介绍了光伏组串模型的搭建方法,利用Simulink中的S函数实现特性曲线,确保高精度输出。接着重点讨论了Boost升压电路的改进型功率环控制策略,通过非线性积分器有效避免了占空比过高的风险,使系统震荡幅度显著降低。对于储能部分,采用双向DCDC转换器,实现了充放电模式间的平滑切换,并通过互补PWM技术增强了硬件死区保护效果。逆变器部分则采用了单极调制方式,减少了开关损耗,并优化了LC滤波参数的设计,确保了低谐波失真率。此外,还设计了一个基于继电器的智能负载模拟系统,能够根据交流电压的变化自动调节负载,提高了仿真的效率和准确性。最后,通过对整个系统的动态优先级管理,使得光伏出力波动时储能系统可以迅速响应,保持直流母线电压稳定。 适合人群:从事光伏系统设计、仿真建模以及电力电子领域的工程师和技术人员。 使用场景及目标:适用于需要深入了解独立光伏系统内部工作原理的研究人员,帮助他们掌握从光伏组串到逆变器各环节的具体实现细节,为实际工程项目提供可靠的理论支持和技术指导。 其他说明:文中提供了大量MATLAB/Simulink代码片段和具体参数设置建议,便于读者理解和复现实验结果。同时强调了不同控制策略之间的对比分析,指出了最优解的选择依据。

Global site tag (gtag.js) - Google Analytics