在Android上应用PhoneGap和Dojo Mobile

在Android上应用PhoneGap和Dojo Mobile

这一文章系列以创建一个简单的移动应用为起点,最终会讲到通过Android设备来使用web服务。你会学习如何使用Eclipse和PhoneGap来创建一个只用到了HTML和JavaScript的移动混合应用;以及使用Mobile Dojo赋予应用本地化的感觉。在本文中,我们了解如何通过整合PhoneGap和Mobile Dojo来快速地为Android创建一个混合移动应用,其外观和行为都很类似典型的Android应用。

(译者注:由于yeeyan编辑器对文章中的标签做解析的原因,我在每个标签的<符号之后都加入了一个空格,比如说,左尖括号<+head+右尖括号>,我会写成<
head>
,以便其能够在文章中正确显示,不便之处敬请谅解。)

前言



无论你去到哪里,人们都在使用移动设备了与家庭和朋友保持联系,拍照并上传到社交网络上,查找餐厅的位置,或是查看最新的头条新闻。移动设备有着许多不同的外型和风格,移动电话上运行着各种各样不同的操作系统,比如说Apple的iOS、Google的Android以及Blackberry的Research In Motion等。有些电话有着很大的显示屏幕、物理键盘,并且是运行在3G、4G或是WiFi网络上。移动电话可能装备了用于加速、定位或甚至是付费的传感器,某些这样的设备甚至并不是电话,它们是有着更大的显示屏幕和仅限于数据的网络连接的平板电脑。

抛开这些不同之处,移动设备都是类似的,他们都运行移动应用。移动应用可分成两种类型:

本地化应用

本地化应用安装在设备上,是使用软件开发工具(SDK)创建并通过应用商店发布的二进制可执行程序。每种移动操作系统都有一个SDK,遗憾的是,其与其他操作系统的SDK是不同的。

例如,若要为iOS创建一个应用,你需下载并安装iOS SDK和开发工具,并且你需要使用Objective-C这一编程语言来编写应用的代码;Android应用则是使用Android SDK来开发,使用Java语言来进行编程。因此,若要创建一个移动应用,你需要了解每一种SDK,并且要使用所支持的编程语言来编写应用。对于每一种平台的SDK来说,都有着一个很陡的学习曲线,因此移动应用的开发是很复杂的。

Web应用

web应用被加载到移动web浏览器中,其与本地化应用的不同之处在于它们是使用web技术(HTML、JavaScript和CSS)来编码的,不用考虑设备的操作系统,无需学习每种设备的不同编程语言。HTML和JavaScript对于web开发者来说是很熟悉的,因为他们被用来创建加载到桌面浏览器中的web页面。一般情况下,移动浏览器都能够渲染相同的web页面,不过网站通常都会提供一个移动版本,该版本的内容少一些,以便加载速度更快一些(出于更小的屏幕尺寸和更慢的网络连接方面的考虑)。

若要“运行”一个web应用,用户把一个URL输入到移动web浏览器中,这一操作加载web页面,这是web应用的入口点。web应用不是通过应用商店来发布的;它们就是包含在其他web页面、电子邮件甚至是硬拷贝中的简单链接。

本地化应用和web应用都有着相应的优点和缺点,关于孰优孰劣存在着大量的争论。出于解决这场争斗的目的,一种新的混合型的应用试图把本地化应用和web应用两方面的优势结合起来。

与web应用一样,混合应用使用web技术编程,但被打包成本地化应用。对于多种设备操作系统来说,混合应用只需编写一次,使用的是许多开发者熟悉的编程语言。由于混合应用实际上是一种本地化应用,因此你需要通过JavaScript来访问一些目前对于web应用来说还是不可用的设备功能。混合应用还可以使用应用商店来发布和安装,就像本地化应用那样。

PhoneGap是一个在构建混合应用方面很受欢迎的工具,它的开源移动框架包含了一个访问诸如加速计和照相机一类的设备功能的JavaScript API。

本文展示如何使用PhoneGap和Dojo Mobile工具来开发一个混合型的移动Android应用,学习如何使用Android模拟器和工具来测试应用,并了解如何在Android设备或是平板电脑上运行应用。

前提条件

本文假设你对于Eclipse开发环境、HTML、JavaScript和CSS都有一定程度的了解,下面的软件是必需的:

 1. Windows、OSX或是 Linux操作系统

2. Java Development Kit (JDK) 5或者JDK 6 (仅是JRE不能满足要求)

3. Eclipse开发环境,比如说Eclipse Helios V3.6或之后的版本,或是IBM Rational Application Developer V8

4. Android SDK及平台 (r12或之后的版本)

5. Android Development Toolkit (ADT)的Eclipse插件

6. PhoneGap SDK (V1.0.0或之后的版本)

7. Dojo Toolkit (V1.6或之后的版本)

请参阅参考资料获取下载这些软件的链接。

安装开发环境



安装开发环境需要执行下面这些步骤:

1. 安装JDK以及Eclipse或是Rational Application Developer。

2. 下载Android SDK。

3. 下载和安装Eclipse的ADT插件。

4. 配置Android的Eclipse开发环境。

5. 安装所需的Android平台。

6. 创建一个新的Android虚拟设备(Android Virtual Device,AVD)。

7. 下载PhoneGap SDK。

8. 下载Dojo Toolkit。

安装JDK以及Eclipse或是Rational Application Developer

第一项任务是验证JDK 5或是之上的版本是否已经安装,如果没有的话,下载Java SE JDK(参见参考资料)。

就本文来说,你可以使用Eclipse或是IBM Rational Application Developer(RAD),RAD支持Windows或是Linux,OSX开发者可以使用Eclipse。

RAD由IBM版本的Eclipse构成,外加支持Java EE的IBM工具,其中包括了IBM的Web 2.0功能包。若要使用RAD,你需要使用版本8或是之后的版本。RAD包含了IBM的JDK,缺省情况下会使用该JDK,但是,这一JDK并未包含需要用来创建和签署Android应用的Java包。若要使用Java SE JDK来代替的话,你需要使用清单1中的信息来代替C:/Program Files/IBM/SDP/eclipse.in(或是你安装RAD的位置)。

清单1. Windows RAD的eclipse.ini的内容

-startup

plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar

--launcher.library

plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101222

--launcher.defaultAction

openFile

--launcher.XXMaxPermSize

256M

-showsplash

org.eclipse.platform

--launcher.XXMaxPermSize

256m

--launcher.defaultAction

openFile

-install

C:/Program Files/IBM/SDP

-vmargs

-Dosgi.requiredJavaVersion=1.5

-Xms40m

-Xmx512m

如果你想要使用Eclipse的话,需要使用3.6或是之后的版本。由于要在本系列后面的文章中编写web服务,因此需要下载Eclipse IDE for Java EE Developers(参见参考资料)。不过,如果你只是想编写Android应用的话,使用Eclipse IDE for Java Developers就可达目的了。

Eclipse和RAD非常类似,在本文中,在提到Eclipse时,指的是Eclipse或RAD,不过界面插图则是来自运行在Windows上的RAD。

下载Android SDK

创建Android应用必须要用到Android SDK(参见参考资料),该SDK是命令行程序的一个集合,这些程序被用来编译、构建、模拟和调试Android应用。

如果是安装在Windows上的话,最简单的做法是下载压缩包然后解压到c:\这一根目录下。r12安装程序有几个问题,不能检测Java,不能安装到名字带有空格的目录下。

下载并安装ADT插件

Android提供了一个极大地简化了应用开发的Eclipse插件,其与Eclipse集成在一起,提供一个快速的开发环境。若要安装Android开发工具(Android Development Toolkit,ADT)插件(参见参考资料),请按照下面的步骤进行:

1. 从Eclipse中选择菜单项 Help > Install New  Software… > Add…

2. 输入软件的名称和URL位置,如图1所示。名称:Android ADT Eclipse plugin;位置:https://dl-ssl.google.com/android/eclipse/

图1. 安装Android ADT插件

3. 选择Developer Tools, 检查确认所有的复选框都已选中,如图1所示,然后选择Next。

4. 如图2所示,选择Next接受许可协议,然后安装选项。

图2. 安装的详细选项

在安装完成之后,重新启动Eclipse。

配置Android的Eclipse开发环境

若要配置Android的Eclipse开发环境,显示Preferences对话框。

1. 对于Windows来说,选择Window > Preferences > Android

2. 对于OSX来说,选择 Eclipse > Preferences > Android

点击SDK location的Browse…按钮,然后选择Android SDK所在的目录,如图3所示:

图3. 在Eclipse中指定SDK的位置

点击Apply按钮然后再点击OK按钮。

把Android LogCat视图加入到Eclipse IDE中帮助调试:

1. Window > Show View > Other…

2. Android > LogCat

图4. LogCat视图

安装Android平台

若要编译某个特定版本的Android应用的话,需要下载和安装一个或多个Android平台。平台包括了库文件和模拟器。

在Eclipse中打开Android SDK and AVD Manager,该管理器被用来管理应用用到的Android SDK的版本和模拟器。

选择Window > Android SDK and AVD Manager,如图5所示:

图5. Android配置的菜单项

安装运行应用所需版本的Android SDK平台。

这一示例应用会用到GPS定位服务,因此你应该选择并安装一个基于Google API的平台。例如,选择Google APIs by Google Inc., Android API 8, revision 2,如图6所示。如果你没有使用GPS的话,那么可以安装列在 Android Repository这一分类下的平台。

对于Windows上的安装来说,选择Google USB Driver包来提供对连接Android电话的支持。

选择Install Selected

图6. Android SDK and AVD  Manager

接受每个包的许可协议,然后选择Install,如图7所示:

图7. 要安装的Android包

管理器会下载和安装选中的包。

创建一个虚拟的Android设备

Android SDK and AVD Manager还被用来创建和管理应用用到的模拟器实例。

从Virtual Devices页面中选择New…来创建一个新的AVD,如图8所示,输入一个名称(name)、目标(target)、SD卡大小(SD card size)和HVGA皮肤(skin):

图8. 创建一个新的AVD

点击Create AVD按钮。

下载PhoneGap SDK

PhoneGap是一个开源的混合移动应用框架,支持多种平台,其中包括了Android、iOS、Blackberry、Palm、Symbian和Windows Phone。有了PhoneGap,你可以很容易地使用标准的web技术(HTML、JavaScript和CSS)来编写跨平台的移动应用,以及可以通过JavaScript来访问诸如加速计和照相机一类的设备功能。请参阅参考资料来获取所支持功能的信息的链接,这些信息提供了PhoneGap的最新细节。

PhoneGap提供了一组JavaScript API,这些API支持访问许多的设备功能,对于一个典型的web应用来说,这些功能是无法通过移动web浏览器来获得的;其使用一个本地化的包装器来包装web应用,从而实现了这一支持。PhoneGap把web应用的代码和设备浏览器的渲染器结合起来,产生一个本地化应用,该应用能够部署到应用商店中,并且可安装在设备上。

作为PhoneGap API的功能组成,其支持访问设备的加速计、音频和视频拍摄、相机、指南针、通讯录、文件、地理定位、网络、通知和存储。PhoneGap API文档(参见参考资料)提供了更多的细节和例子。

在下载了PhoneGap(参见参考资料)之后,你稍后要把代码拷贝到Android工程中(在“创建一个新的Android工程”一节)。

下载Dojo

Dojo Toolkit是一个开源的JavaScript工具包,旨在加快那些被载入web浏览器并在其中运行的网站和应用的开发。

由于移动web浏览器的功能不如桌面浏览器,因此Dojo包含了一个名为Dojo Mobile的移动版本。其针对移动web浏览器进行了优化,提供了许多UI部件和主题,你可以使用它们来为你的移动应用选择一种风格,模仿本地化应用。

Dojo Mobile的一些重要功能包括:

1. 得益于Dojo Mobile解析器的部件的轻量级加载。

2. 高端iOS和Android设备上的类本地化应用体验的CSS3动画和过渡。

3. 包括了iOS和Android观感的主题。

4. 兼容非CSS3兼容的设备和浏览器。

5. 完全声明式的语法,允许有一个简单的学习曲线。

6. 一大套部件,在即将发布的Dojo Mobile 1.7中会有更多。

就本文来说,你需要下载Dojo 1.6(参见参考资料)。

创建一个新的Android工程



现在开发环境已经安装好了,让我们开始创建一个简单的Android应用吧。

在Eclipse中选择File > New > Other…然后是 Android > Android project,你应该会看到如图9所示的对话框。

图9. 新的Android工程

如图9所示,输入工程名称(project name),选择构建目标(build target),然后输入应用的名称(application name)、包名称(package name)和活动名称(create activity),然后点击Finish按钮创建工程。

添加PhoneGap库

你现在就有了一个简单的Android应用,在能够编写PhoneGap应用之前,需要添加PhoneGap库。这涉及到了两个文件:一个是包含了我们的应用调用到的PhoneGap API的JavaScript文件,一个是包含了PhoneGap API的本地化实现的本地化JAR文件。

1. 展开AndroidPhoneGap 工程的树视图,如图10所示:

图10. 带有PhoneGap库的Android工程

2. 创建目录 \assets\www,如果 \libs不存在的话也创建该目录。

3. 解压PhoneGap的下载文件,并找到Android子目录的位置。

4. 把三个PhoneGap库文件从Android子目录拷贝到下面的Eclipse工程文件夹中:

  4.1. 把phonegap-1.0.0.jar复制到\libs\phonegap-1.0.0.jar

 4.2. 把phonegap-1.0.0.js复制到\assets\www\phonegap-1.0.0.js

4.3. 把xml/plugins.xml复制到\res\xml\plugins.xml

尽管PhoneGap的JAR文件已经复制到了工程中,你还是需要把它添加到工程的构建路径中。

1. 选择Project > Properties > Java Build  Path > Libraries > Add JARs…

2. 浏览工程,找到phonegap-1.0.0.jar并把它添加进来,如图11所示:

图11. 添加PhoneGap的JAR文件

最后一个准备让示例Android应用使用PhoneGap的步骤是修改App.java,因为PhoneGap应用是使用HTML和JavaScript来编写的,因此你需要修改App.java,使用loadUrl()来加载HTML文件,如清单2所示。你可以通过双击图10所示的树视图中的App.java来编辑它。

清单2. App.java

Package com.ibm.swgs;

import android.os.Bundle;

import com.phonegap.*;

public class App extends DroidGap //Activity

{

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

//setContentView(R.layout.main);

super.loadUrl("file:///android_asset/www/index.html");

}

}

编写PhoneGap应用

现在已经做好了编写PhoneGap应用的准备了,对于Android来说,assets目录下的文件要使用file:///android_asset来引用,如清单2的loadUrl()中指定的那样,你需要在assets/www下创建一个index.html文件。

在创建了index.html之后,输入下面的清单3中的内容。

清单3. index.html

< !DOCTYPE HTML>

< html>

< head>

< title>PhoneGap< /title>

< script type="text/javascript" charset="utf-8" src="phonegap-1.0.0.js" kesrc="phonegap-1.0.0.js">< /script>

< /head>

< body onload=‘document.addEventListener("deviceready", deviceInfo, false);‘>

< script>

function deviceInfo() {

document.write("< h1>This is Phonegap 1.0.0 running on "+device.platform+"

"+device.version+"!< /h1>");

}

< /script>

< /body>

< /html>

按顺序对index.html做一下简单的解释,在调用任何的PhoneGap API之前,我们必须等待deviceready事件,该事件表明PhoneGap的本地化部分已经初始化并做好了准备。在清单3中,onload回调注册了deviceready事件,在该事件触发时,我们输出设备的OS和版本。

由于PhoneGap使用了有权限保护的本地化功能,因此你需要修改AndroidManifest.xml来加入这些uses-permission标签;你还需要指定support-screens标签、android:configChanges 属性和com.phonegap.DroidGap这一activity标签,如清单4所示。

清单4. AndroidManifest.xml

< ?xml version="1.0" encoding="utf-8"?>

< manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.ibm.swgs"

android:versionCode="1"

android:versionName="1.0">

< supports-screens

android:largeScreens="true"

android:normalScreens="true"

android:smallScreens="true"

android:resizeable="true"

android:anyDensity="true"

/>

< 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.INTERNET" />

< uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

< application android:icon="@drawable/icon" android:label="@string/app_name">

< activity android:name=".App"

android:label="@string/app_name"

android:configChanges="orientation|keyboardHidden">

< intent-filter>

< action android:name="android.intent.action.MAIN" />

< category android:name="android.intent.category.LAUNCHER" />

< /intent-filter>

< /activity>

< activity android:name="com.phonegap.DroidGap" android:label="@string/app_name"

android:configChanges="orientation|keyboardHidden">

< intent-filter>

< /intent-filter>

< /activity>

< /application>

< /manifest>

在Android模拟器中运行应用



现在PhoneGap应用做好了运行的准备了,选择Run > Run  As > Android Application,你应该会看到类似图12的界面。

图12. Android模拟器

Eclipse自动地构建应用,启动模拟器,在模拟器中安装和运行应用。

模拟器可能要花几分钟的时间来启动,若要加快开发速度,让模拟器保持运行,直到某段开发时间的结束。Eclipse会自动使用正在运行的模拟器而不会启动一个新的。

在Android电话上运行应用



如果你有一个Android电话的话,你可以在你的设备上运行该PhoneGap应用。不过,在能够使用你的电话来进行开发之前,你需要打开USB调试,步骤如下:

1. 进入Home界面,选择Menu。

2. 选择Settings > Applications >  Development

3. 启用USB调试。

4. 你还需要在Android Manifest中声明应用是可调式的,编辑AndroidManifest.xml,把android:debuggable="true"添加到元素中。

5. 使用USB线来把Android电话连接到你的开发机器上。

6. 运行应用,选择 Run As > Android Application

  你会被提示选择模拟器还是真实的设备作为目标,选择Android电话,如图13所示:

  图13. 选择设备

一旦应用被下载并安装到你的手机上之后,就会被启动,如图14所示:

图14. 运行在设备上的应用

使用Dalvik调试监控服务器(DDMS)



ADT插件包含了一个调试用的Dalvik调试监控服务器(Dalvik Debug Monitor Server,DDMS)透视图,可用来跟踪和调试应用的流程,可以与模拟器或是真实设备一起使用。

DDMS可在Eclipse中启动,选择Window Open Perspective > Other... > DDMS,图15给出了一个例子。

图15. Eclipse内的DDMS窗口

还可以使用Android SDK的安装位置上的命令行来启动DDMS。

1. Windows:C:\android-sdk-windows\tools\ddms.bat

2. OSX:.../android-sdk-mac-86/tools/ddms

图16. 独立的调试器

通过DDMS,你可以:

1. 查看日志控制台

2. 显示设备上的进程的状态

3. 检查线程信息

4. 查看某个进程的堆使用情况

5. 强制垃圾回收

6. 跟踪对象的内存分配

7. 执行方法分析

8. 操作设备的文件系统

9. 执行设备的屏幕捕捉

10. 模拟电话操作

请(在参考资料中)参阅DDMS文档了解更多信息。

使用Dojo来扩展工程



Dojo是一个JavaScript工具包,为移动应用带来了几方面的好处。它提供了模拟本地化移动应用的主题,它带来的用户界面(UI)容器和小部件简化了应用UI的开发。

Dojo的安装

若要使用Dojo,你需要把它复制到例子工程中。

创建下面的目录,如图17所示。

1. \assets\www\libs

2. \assets\www\libs\dojo

3. \assets\www\libs\dojo\dojo

4. \assets\www\libs\dojo\dojox

复制下面的Dojo文件:

1. 把dojox\mobile.js复制到\assets\www\libs\dojo\dojox目录下

2. 把dojox\mobile目录复制到\assets\www\libs\dojo\dojox目录下

3. 把dojo\dojo.js复制到\assets\www\libs\dojo\dojo目录下

图17. 加入了Dojo的Android工程

若要加载Dojo,你需要编辑index.html并把清单5中的代码行加入到< head>段中的phonegap-1.0.0.js这一script标签之前。

清单5. 把Dojo加入到index.html中

< meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,

minimum-scale=1,user-scalable=no"/>

< link rel="stylesheet" href="libs/dojo/dojox/mobile/themes/android/android.css" kesrc="libs/dojo/dojox/mobile/themes/android/android.css"

type="text/css" media="screen" title="no title" charset="utf-8">

< script type="text/javascript" src="libs/dojo/dojo/dojo.js" kesrc="libs/dojo/dojo/dojo.js" djConfig="parseOnLoad:true">

< /script>

在phonegap-1.0.0.js这一script标签之后,加入Dojo Mobile解析器的require语句,如清单6所示。

清单6. 修改index.html以加载移动Dojo

< script type="text/javascript">

dojo.require("dojox.mobile.parser");

dojo.require("dojox.mobile");

< /script>

更新应用

使用一个新的< body>标签来代替index.html中现有的标签,这一新的标签包含了两个简单的段,如清单7所示:

清单7. 修改index.html的主体部分内容

< body>

< !-- ACCIDENT TOOLKIT PAGE -->

< div dojoType="dojox.mobile.View" id="accHelp" selected="true">

< h1 dojoType="dojox.mobile.Heading">Accident< /h1>

< div class="text">If you are in an accident, you should first move to a safe

location. Below are some additional actions you can take:< /div>

< ul dojoType="dojox.mobile.RoundRectList">

< li dojoType="dojox.mobile.ListItem"

onclick="window.location=‘geo:0,0?q=police‘;">Call the Police< /li>

< li dojoType="dojox.mobile.ListItem"

onclick="window.location=‘geo:0,0?q=towing‘;">Call for a Tow Truck< /li>

< li dojoType="dojox.mobile.ListItem" moveTo="accInfo" transition="slide"

onClick="itemClicked();">Exchange Driver Info< /li>

< li dojoType="dojox.mobile.ListItem" moveTo="accInfo" transition="slide"

onClick="itemClicked();">Record Accident Location< /li>

< li dojoType="dojox.mobile.ListItem" moveTo="accInfo" transition="slide"

onClick="itemClicked();">Take Photos of Accident< /li>

< /ul>

< /div>

< !-- EXCHANGE DRIVER INFO PAGE -->

< div dojoType="dojox.mobile.View" id="accInfo">

< h1 dojoType="dojox.mobile.Heading" back="Accident" moveTo="accHelp"

onClick="console.log(‘Going back‘);">Driver< /h1>

< h2 dojoType="dojox.mobile.RoundRectCategory">Other Driver Info< /h2>

< /div>

< /body>

如清单8所示,在最后的一个< div>标签之后加入一个简单的JavaScript函数itemClicked(),用来向控制台写入日志。

清单8. Onclick处理程序

< script>

function itemClicked() {

console.log("itemClicked()");

}

< /script>

在模拟器上运行

在工程上点击右键,选择Run as > Android Application,把该应用当成Android应用来运行。

图18. 运行在模拟器上的应用

Dojo应用中的每个界面都由一个声明为 dojoType=‘dojox.mobile.View‘的div元素来定义,如清单9所示。最初的界面由属性selected=‘true‘来标识。

界面的标题由< h1 dojoType=‘dojox.mobile.Heading‘>标签来定义。

清单9. 定义界面和标题

< div dojoType="dojox.mobile.View" id="accHelp" selected="true">

< h1 dojoType="dojox.mobile.Heading">Accident< /h1>

< /div>

可以注意到最后三个列表项末端的>符号,这是加载另一个Dojo界面的指示器。

带有dojoType=‘dojox.mobile.ListItem‘的列表项标签被用来显示项目列表,列表可被选择,如清单10所示。其被渲染成一个本地化的选择列表。moveTo属性指定了哪一个div被显示,transition属性则指明了其移入视图中的方式。

清单10. 列表项加载新的界面

< li dojoType="dojox.mobile.ListItem" moveTo="accInfo" transition="slide"

onClick="itemClicked();">Exchange Driver Info< /li>

选中 Exchange Driver Info,该操作隐藏当前的div并显示id=‘accInfo‘的目标div。你应该会看到Driver界面滑入视图中,如图19所示。

图19. Driver的信息界面

列表项目的作用不仅是加载其他界面,例如,onclick处理程序可用来显示Google地图,搜索最近的警察局,清单11给出了代码。

若要返回到之前的界面中,选择标题中的Accident按钮。

清单11. 加载Google地图的列表项

< li dojoType="dojox.mobile.ListItem"

onclick="window.location=‘geo:0,0?q=police‘;">Call the Police< /li>

许多的移动设备都支持geo:协议,通过加载geo:lat,lng?q=query格式的URI,本地化的Google地图服务会被显示出来。

在模拟器上选择Call the Police,在操作会显示一幅最近警察局的地图,如图20所示:

图20. 搜索最近的警察局

你的位置可能会有所不同,这取决于在DDMSD Emulator Control中输入的经度和维度,图21给出了位置的设定。

图21. DDMS中的位置设定

在设备上运行

如果你有一个已经连接好的Android电话的话,按照“在Android电话上运行应用”一节中的描述来在你的设备上运行该应用。如图22所示,界面看起来类似模拟器上的那些。警察局的搜索应该是返回一个临近你的当前位置的警察局。

图22. 运行在设备上的应用

结束语



在本文中,你了解到了如何通过整合PhoneGap和Mobile Dojo来快速地创建一个Android版本的混合移动应用,该应用的外观和行为都类似典型的Android应用。你能够很快地编写出这样的应用,因为我们使用的是HTML和JavaScript而不是Java。鉴于web代码是跨所有的移动操作系统保持不变的,因此只需要稍微花一点精力,就能够为iOS和Blackberry构建这样的一个混合应用。

请继续关注这一系列的第2部分内容,该部分谈及的是使用Dojo和PhoneGap来编写一个移动保险应用。

参考: (1)(2)

时间: 2024-11-06 12:41:24

在Android上应用PhoneGap和Dojo Mobile的相关文章

PhoneGap与Jquery Mobile组合开发android应用的配置

PhoneGap与Jquery Mobile结合开发android应用的配置 由于工作需要,用到phonegap与jquery moblie搭配,开发android应用程序. 这些技术自己之前也都没接触过,可以说是压根没听说过,真是感慨,在开发领域,技术日新月异,知识真是永远学不完的.就算是做java开发的,可是细分下来,专业方向还是很多的:自己没有涉及的技术还是太多了,自个需要对单个领域专业点,知识丰富点.做不了全才,那咱做个专才,在如今社会还是必须的. 好了,咱们言归正传: PhoneGap

翻译 - 【Dojo Tutorials】Getting Started with Dojo Mobile

原文:Getting Started with Dojo Mobile web上的内容更新的飞快,重心很快就转移到移动设备上来了.就像对象web上的其他问题一样,Dojo对此也有解决方案:Dojo Mobile.Dojo Mobile是一个框架,可以让你轻松的构建设备兼容的web应用.这是关于Dojo Mobile系列教程的引导文章.通过对这一系列文章的学习,我们将构建一个叫做FlickView的Dojo Mobile应用.首先,我们应该先学习为什么既如何使用Dojo Mobile. Dojo

【课程分享】HTML5开发框架PhoneGap实战(jQuery Mobile开发、API解析、3个经典项目实战)

对这个课程有兴趣的朋友可以加我的QQ2059055336和我联系 课程讲师:厉风行 课程分类:Java 涉及项目:我要地图.豆瓣音乐.小强快跑 用到技术:HTML5.jQuery Mobile.PhoneGap 其他特性:PhoneGap API 涵盖内容:代码.视频.ppt 课时数量:40 PhoneGap前景 Adobe最近公开表示将会为HTML5开发推出更多有意义的工具.有业内人士表示,Adobe的HTML5战略特别值得注意,此外Adobe对于乔布斯的此番公开批评曾积极地回应道:"乔布斯说

翻译 - 【Dojo Tutorials】Developing a Dojo Mobile Application: FlickrView

原文:Developing a Dojo Mobile Application: FlickrView 本系列的第一篇文章Getting Started with Dojo Mobile,详细的讲述了Dojo工具集中dojox/mobile包的基本概念与使用方法.在接下来的文章中,我们将创建一个功能齐全的Dojo Mobile web应用,叫做FlickrView.本文主要让你熟悉什么是FlickrView,我们想做什么,然后会构建这个应用的HTML与CSS布局. FlickrView是什么?

Unity3D之AssetBundle学习:Android上运行笔记

路径统一 在Android上加载StreamingAssets文件夹下的AssetBundle文件,首先需要对加载地址进行处理,注意PC.Android和IOS的地址不一致需要针对不同的平台不同的处理,通用代码如下: 1 //统一不同平台下 StreamingAssets 路径 2 public static readonly string STREAMING_ASSETS_PATH = 3 #if UNITY_ANDROID 4 "jar:file:///" + Applicatio

SharePanel – Android上简单的一键分享,可分享到微信QQ和新浪微博

SharePanel – Android上简单的一键分享,可分享到微信QQ和新浪微博 SharePanel Android上简单的一键分享可分享到微信QQ和新浪微博 简介 效果图 代码块 简介 最近在写一个小程序长微博工具,效果就是编辑长微博,然后一键分享到微信.QQ和新浪微博. 一开始是想直接用Intent.createChooser(target, title)来做,后来一想,这样做不是很好啊,会有许多乱七八糟的应用弹出来,我想优先分享到微信.QQ和微博,于是找了点资料,将一键分享这个部分做

ffmpeg在android上输出滑屏问题处理

ffmpeg部分机器上有花屏的问题 原代码如下: while(av_read_frame(formatCtx, &packet)>=0 && !_stop && NULL!=window && bInit) { // Is this a packet from the video stream? if(packet.stream_index==videoStream) { // Decode video frame avcodec_decode

Android上方便地开发的C程序

如果你基于没有一个专门的开发板练手,那你的Android手机也可以开发大多数C应用程序,安装好后编译C的编译器.本文只写一个Hello World的运行过程.优点是:不需要eclipse,不需要Android源码,不需要Android.mk,不需要NDK.一个C程序员就可以很好的利用Android了,需要一个编译器和一个adb要把程序放到Android系统中. 1.安装adb sudo apt-get install android-tools-adb 2.安装交叉工具链 sudo apt-ge

Android 上的 制表符(tab) —— 一个神奇的字符 (cocos2dx crash)

今天测试发现了游戏的一个问题,系统邮件,如果发了tab,在android上一打开邮件内容就会crash.而且他们很确定是tab的问题. 凭我多个月的经验(确实没多年...)来看,从来没听说在android上会因为一个tab崩溃,而且如果有这个问题,肯定会有很多人遇到,估计早就吵翻天了,搜索了一下,什么可用信息都没有. 于是写个测试工程测试了一下,分别在mac下和windows下,用文本编辑工具编辑了4个txt文档,utf有bom和无bom,内容是" tab abcd ",发现都能正常显