Cordova 快速指南



Cordova - 概述

Cordova 是一个使用 HTML、CSS 和 JavaScript 构建混合移动应用程序的平台。

官方文档给出了 Cordova 的定义:

“Apache Cordova 是一个开源的移动开发框架。它允许您使用标准 Web 技术,例如 HTML5、CSS3 和 JavaScript 进行跨平台开发,避免使用每个移动平台的原生开发语言。应用程序在针对每个平台的包装器中执行,并依赖于符合标准的 API 绑定来访问每个设备的传感器、数据和网络状态。”

Cordova 特性

现在让我们简要了解 Cordova 的特性。

命令行界面 (Cordova CLI)

此工具可用于启动项目、构建不同平台的流程、安装插件以及许多其他使开发过程更轻松的有用功能。您将在后续章节中学习如何使用命令行界面。

Cordova 核心组件

Cordova 提供了一套每个移动应用程序都需要的一组核心组件。这些组件将用于创建应用程序的基础,以便我们可以投入更多时间来实现我们自己的逻辑。

Cordova 插件

Cordova 提供了 API,用于将原生移动功能实现到我们的 JavaScript 应用程序中。

许可证

Cordova 采用 Apache 许可证 2.0 版授权。Apache 和 Apache 羽毛标志是 Apache 软件基金会的商标。

Cordova 优势

我们现在将讨论 Cordova 的优势。

  • Cordova 提供了一个构建混合移动应用程序的平台,因此我们可以开发一个可在不同移动平台上使用的应用程序——iOS、Android、Windows Phone、Amazon-fireos、BlackBerry、Firefox OS、Ubuntu 和 Tizen。

  • 开发混合应用程序比原生应用程序更快,因此 Cordova 可以节省开发时间。

  • 由于我们在使用 Cordova 时使用的是 JavaScript,因此我们无需学习特定于平台的编程语言。

  • 许多社区插件可以与 Cordova 一起使用,这些插件拥有多个针对其进行优化的库和框架。

Cordova 限制

以下是 Cordova 的限制。

  • 混合应用程序比原生应用程序慢,因此对于需要大量数据和功能的大型应用程序而言,使用 Cordova 并不是最佳选择。

  • 跨浏览器兼容性可能会造成许多问题。大多数情况下,我们正在为不同的平台构建应用程序,因此测试和优化可能非常耗时,因为我们需要涵盖大量的设备和操作系统。

  • 某些插件与不同的设备和平台存在兼容性问题。Cordova 还有一些尚未支持的原生 API。

Cordova - 环境搭建

在本节中,我们将了解 Cordova 的环境搭建。要开始设置,我们首先需要安装一些组件。这些组件列在下表中。

序号 软件及说明
1

NodeJS 和 NPM

NodeJS 是 Cordova 开发所需的平台。查看我们的 NodeJS 环境搭建 以了解更多详细信息。

2

Android SDK

对于 Android 平台,您需要在计算机上安装 Android SDK。查看 Android 环境搭建 以了解更多详细信息。

3

XCode

对于 iOS 平台,您需要在计算机上安装 Xcode。查看 iOS 环境搭建 以了解更多详细信息。

安装 Cordova

在我们开始之前,您需要知道在本教程中我们将使用 Windows 命令提示符

步骤 1 - 安装 git

即使您不使用 git,也应该安装它,因为 Cordova 将其用于某些后台进程。您可以 在此处 下载 git。安装 git 后,打开您的环境变量。

  • 右键单击“计算机”
  • 属性
  • 高级系统设置
  • 环境变量
  • 系统变量
  • 编辑

将以下内容复制到变量值字段的末尾。这是 git 安装的默认路径。如果您将其安装在不同的路径上,则应使用该路径而不是我们下面的示例代码。

;C:\Program Files (x86)\Git\bin;C:\Program Files (x86)\Git\cmd

现在您可以在命令提示符中键入git 来测试安装是否成功。

步骤 2 - 安装 Cordova

此步骤将全局下载并安装 Cordova 模块。打开命令提示符并运行以下命令:

C:\Users\username>npm install -g cordova 

您可以通过运行以下命令检查已安装的版本:

C:\Users\username>cordova -v 

这就是您在 Windows 操作系统上开始开发 Cordova 应用程序所需的一切。在我们的下一个教程中,我们将向您展示如何创建第一个应用程序。

Cordova - 第一个应用

我们已经了解了如何安装 Cordova 并为其设置环境。一切准备就绪后,我们可以创建我们的第一个混合 Cordova 应用程序。

步骤 1 - 创建应用程序

在命令提示符中打开您希望将应用程序安装到的目录。我们将在桌面上创建它。

C:\Users\username\Desktop>cordova 
   create CordovaProject io.cordova.hellocordova CordovaApp
  • CordovaProject 是创建应用程序的目录名称。

  • io.cordova.hellocordova 是默认的反向域名值。如果可能,您应该使用您自己的域名值。

  • CordovaApp 是您的应用程序的标题。

步骤 2 - 添加平台

您需要在命令提示符中打开您的项目目录。在我们的示例中,它是CordovaProject。您应该只选择所需的平台。为了能够使用指定的平台,您需要安装特定平台的 SDK。由于我们正在 Windows 上进行开发,因此我们可以使用以下平台。我们已经安装了 Android SDK,因此在本教程中我们只安装 android 平台。

C:\Users\username\Desktop\CordovaProject>cordova platform add android 

还有其他可在 Windows OS 上使用的平台。

C:\Users\username\Desktop\CordovaProject>cordova platform add wp8 

C:\Users\username\Desktop\CordovaProject>cordova platform add amazon-fireos 

C:\Users\username\Desktop\CordovaProject>cordova platform add windows 

C:\Users\username\Desktop\CordovaProject>cordova platform add blackberry10

C:\Users\username\Desktop\CordovaProject>cordova platform add firefoxos 

如果您在 Mac 上进行开发,则可以使用:

$ cordova platform add IOS 

$ cordova platform add amazon-fireos 

$ cordova platform add android 

$ cordova platform add blackberry10 

$ cordova platform add firefoxos 

您还可以使用以下命令从项目中删除平台:

C:\Users\username\Desktop\CordovaProject>cordova platform rm android 

步骤 3 - 构建和运行

在此步骤中,我们将为指定的平台构建应用程序,以便我们可以在移动设备或模拟器上运行它。

C:\Users\username\Desktop\CordovaProject>cordova build android 

现在我们可以运行我们的应用程序了。如果您使用的是默认模拟器,则应使用:

C:\Users\username\Desktop\CordovaProject>cordova emulate android 

如果您想使用外部模拟器或真实设备,则应使用:

C:\Users\username\Desktop\CordovaProject>cordova run android 

注意 - 我们将使用Genymotion Android 模拟器,因为它比默认模拟器更快且更具响应性。您可以在此处找到该模拟器。您还可以通过启用选项中的USB 调试并将设备通过 USB 数据线连接到计算机来使用真实设备进行测试。对于某些设备,您还需要安装 USB 驱动程序。

运行应用程序后,它将将其安装到我们指定的平台上。如果一切都在没有错误的情况下完成,则输出应显示应用程序的默认启动屏幕。

Cordova App

在我们的下一个教程中,我们将向您展示如何配置 Cordova 应用程序。

Cordova - config.xml 文件

config.xml 文件是我们可以更改应用程序配置的地方。在上一个教程中创建应用程序时,我们设置了反向域名和名称。这些值可以在config.xml 文件中更改。当我们创建应用程序时,默认的配置文件也将被创建。

Config XML Default

下表解释了config.xml 中的配置元素。

config.xml 配置表

序号 元素及详情
1

widget

我们在创建应用程序时指定的应用程序反向域名值。

2

name

我们在创建应用程序时指定的应用程序名称。

3

description

应用程序的描述。

4

author

应用程序的作者。

5

content

应用程序的起始页面。它位于www目录内。

6

plugin

当前已安装的插件。

7

access

用于控制对外部域的访问。默认origin值设置为*,这意味着允许访问任何域。此值将不允许打开某些特定 URL 以保护信息。

8

allow-intent

允许特定 URL 请求应用程序打开。例如,<allow-intent href = "tel:*" /> 将允许 tel: 链接打开拨号器。

9

platform

构建应用程序的平台。

Cordova - 存储

我们可以使用可用于在客户端应用程序上存储数据的存储 API。这将有助于在用户离线时使用应用程序,并且还可以提高性能。由于本教程面向初学者,我们将向您展示如何使用本地存储。在我们以后的教程之一中,我们将向您展示其他可以使用的插件。

步骤 1 - 添加按钮

我们将在index.html文件中创建四个按钮。这些按钮将位于div class = "app"元素内。

<button id = "setLocalStorage">SET LOCAL STORAGE</button>
<button id = "showLocalStorage">SHOW LOCAL STORAGE</button>
<button id = "removeProjectFromLocalStorage">REMOVE PROJECT</button>
<button id = "getLocalStorageByKey">GET BY KEY</button>

它将生成以下屏幕:

Local Storage Buttons

步骤 2 - 添加事件监听器

Cordova 安全策略不允许内联事件,因此我们将在 index.js 文件中添加事件监听器。我们还将window.localStorage分配给稍后将使用的localStorage变量。

document.getElementById("setLocalStorage").addEventListener("click", setLocalStorage); 
document.getElementById("showLocalStorage").addEventListener("click", showLocalStorage); 
document.getElementById("removeProjectFromLocalStorage").addEventListener 
   ("click", removeProjectFromLocalStorage); 
document.getElementById("getLocalStorageByKey").addEventListener 
   ("click", getLocalStorageByKey);  
var localStorage = window.localStorage; 	

步骤 3 - 创建函数

现在我们需要创建在点击按钮时将调用的函数。第一个函数用于将数据添加到本地存储。

function setLocalStorage() { 
   localStorage.setItem("Name", "John"); 
   localStorage.setItem("Job", "Developer"); 
   localStorage.setItem("Project", "Cordova Project"); 
} 

下一个函数将把我们添加到控制台的数据记录下来。

function showLocalStorage() { 
   console.log(localStorage.getItem("Name")); 
   console.log(localStorage.getItem("Job")); 
   console.log(localStorage.getItem("Project")); 
} 	

如果我们点击设置本地存储按钮,我们将设置三个项目到本地存储。如果我们随后点击显示本地存储,控制台将记录我们想要的内容。

Local Storage Log

现在让我们创建用于从本地存储中删除项目的函数。

function removeProjectFromLocalStorage() {
   localStorage.removeItem("Project");
}

如果在删除项目后单击显示本地存储按钮,则项目的输出将显示null值。

Show Local Storage 2

我们还可以使用key()方法获取本地存储元素,该方法将获取索引作为参数并返回具有相应索引值的元素。

function getLocalStorageByKey() {
   console.log(localStorage.key(0));
}

现在,当我们点击按键获取按钮时,将显示以下输出。

Show Local Storage Key

注意

当我们使用key()方法时,即使我们传递参数0来检索第一个对象,控制台也会记录job而不是name。这是因为本地存储按字母顺序存储数据。

下表显示所有可用的本地存储方法。

序号 方法及详情
1

setItem(key, value)

用于将项目设置为本地存储。

2

getItem(key)

用于从本地存储中获取项目。

3

removeItem(key)

用于从本地存储中删除项目。

4

key(index)

用于使用本地存储中项目的索引来获取项目。这有助于按字母顺序排序项目。

5

length()

用于检索本地存储中存在的项目数量。

6

clear()

用于删除本地存储中的所有键值对。

Cordova - 事件

Cordova 项目中可以使用各种事件。下表显示了可用的事件。

序号 事件和详情
1

deviceReady

Cordova 完全加载后触发此事件。这有助于确保在加载所有内容之前不调用任何 Cordova 函数。

2

pause

应用程序转到后台时触发此事件。

3

resume

应用程序从后台返回时触发此事件。

4

backbutton

按下返回按钮时触发此事件。

5

menubutton

按下菜单按钮时触发此事件。

6

searchbutton

按下 Android 搜索按钮时触发此事件。

7

startcallbutton

按下开始通话按钮时触发此事件。

8

endcallbutton

按下结束通话按钮时触发此事件。

9

volumedownbutton

按下音量减小按钮时触发此事件。

10

volumeupbutton

按下音量增大按钮时触发此事件。

使用事件

所有事件的使用方式几乎相同。我们应该始终在我们的js文件中添加事件监听器,而不是使用内联事件调用,因为Cordova 内容安全策略不允许内联 JavaScript。如果尝试内联调用事件,则会显示以下错误。

Event Error

使用事件的正确方法是使用addEventListener。我们将通过一个示例了解如何使用volumeupbutton事件。

document.addEventListener("volumeupbutton", callbackFunction, false);  
function callbackFunction() { 
   alert('Volume Up Button is pressed!');
}

按下音量增大按钮后,屏幕将显示以下警报。

Event Volume Up

处理返回按钮

我们应该将 Android 返回按钮用于应用程序功能,例如返回上一屏幕。要实现自己的功能,我们应该首先禁用用于退出应用程序的返回按钮。

document.addEventListener("backbutton", onBackKeyDown, false);  
function onBackKeyDown(e) { 
   e.preventDefault(); 
   alert('Back Button is Pressed!'); 
} 

现在,当我们按下原生 Android 返回按钮时,警报将出现在屏幕上,而不是退出应用程序。这是通过使用e.preventDefault()命令实现的。

Event Back Button

Cordova - 返回按钮

处理返回按钮

您通常希望将 Android 返回按钮用于某些应用程序功能,例如返回上一屏幕。为了能够实现自己的功能,您首先需要禁用按下返回按钮时退出应用程序。

document.addEventListener("backbutton", onBackKeyDown, false);  
function onBackKeyDown(e) { 
   e.preventDefault(); 
   alert('Back Button is Pressed!'); 
}

现在,当我们按下原生 Android 返回按钮时,警报将出现在屏幕上,而不是退出应用程序。这是通过使用e.preventDefault()实现的。

Event Back Button

Cordova - Plugman

Cordova Plugman 是一款用于安装和管理插件的有用命令行工具。如果您的应用程序需要在一个特定平台上运行,则应使用plugman。如果要创建跨平台应用程序,则应使用cordova-cli,它将修改不同平台的插件。

步骤 1 - 安装 Plugman

打开命令提示符窗口并运行以下代码片段以安装 plugman。

C:\Users\username\Desktop\CordovaProject>npm install -g plugman

步骤 2 - 安装插件

要了解如何使用 plugman 安装 Cordova 插件,我们将以 Camera 插件为例。

C:\Users\username\Desktop\CordovaProject>plugman  
   install --platform android --project platforms\android  
   --plugin cordova-plugin-camera 
   plugman uninstall --platform android --project platforms\android  
   --plugin cordova-plugin-camera 

我们需要考虑上面显示的三个参数。

  • --platform − 我们正在使用的平台(android、ios、amazon-fireos、wp8、blackberry10)。

  • --project − 项目构建的路径。在本例中,它是platforms\android目录。

  • --plugin − 我们要安装的插件。

如果设置了有效参数,命令提示符窗口应显示以下输出。

Plugman Install CMD Output

其他方法

您可以以类似的方式使用uninstall方法。

C:\Users\username\Desktop\CordovaProject>plugman uninstall  
   --platform android --project platforms\android --plugin cordova-plugin-camera 

命令提示符控制台将显示以下输出。

Plugman Uninstall CMD Output

Plugman 提供了一些可用的其他方法。这些方法列在下表中。

序号 方法和详情
1

install

用于安装 Cordova 插件。

2

uninstall

用于卸载 Cordova 插件。

3

fetch

用于将 Cordova 插件复制到特定位置。

4

prepare

用于更新配置文件以帮助 JS 模块支持。

5

adduser

用于向注册表添加用户帐户。

6

publish

用于将插件发布到注册表。

7

unpublish

用于从注册表取消发布插件。

8

search

用于搜索注册表中的插件。

9

config

用于注册表设置配置。

10

create

用于创建自定义插件。

11

platform

用于向自定义创建的插件添加或删除平台。

其他命令

如果遇到问题,您可以随时使用plugman -help命令。可以使用plugman -v检查版本。要搜索插件,可以使用plugman search,最后可以使用plugman config set registry命令更改插件注册表。

注意

由于 Cordova 用于跨平台开发,因此在后续章节中,我们将使用Cordova CLI而不是Plugman来安装插件。

Cordova - 电池状态

此 Cordova 插件用于监控设备的电池状态。该插件将监控设备电池发生的每一次变化。

步骤 1 - 安装 Battery 插件

要安装此插件,我们需要打开命令提示符窗口并运行以下代码。

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-pluginbattery-status 

步骤 2 - 添加事件监听器

打开index.js文件时,您会找到onDeviceReady函数。这就是应该添加事件监听器的地方。

window.addEventListener("batterystatus", onBatteryStatus, false); 

步骤 3 - 创建回调函数

我们将在index.js文件的底部创建onBatteryStatus回调函数。

function onBatteryStatus(info) { 
   alert("BATTERY STATUS:  Level: " + info.level + " isPlugged: " + info.isPlugged); 
}

运行应用程序时,将触发警报。目前,电池已充满 100%。

更改状态后,将显示新的警报。电池状态显示电池现在充满 99%。

Battery Status Change

如果我们将设备插入充电器,新的警报将显示isPlugged值已更改为true

Battery Status Plugged

其他事件

除了batterystatus事件外,此插件还提供另外两个事件。这些事件的使用方式与batterystatus事件相同。

序号 事件和详情
1

batterylow

当电池电量百分比达到低值时触发此事件。此值因设备而异。

2

batterycritical

当电池电量百分比达到临界值时触发此事件。此值因设备而异。

Cordova - 相机

此插件用于拍摄照片或使用图片库中的文件。

步骤 1 - 安装 Camera 插件

命令提示符窗口中运行以下代码以安装此插件。

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugincamera

步骤 2 - 添加按钮和图像

现在,我们将创建用于调用摄像头的按钮和img(一旦拍摄,图像将显示在此处)。这将添加到div class = "app"元素内的index.html中。

<button id = "cameraTakePicture">TAKE PICTURE</button>
<img id = "myImage"></img>

步骤 3 - 添加事件监听器

onDeviceReady函数内添加事件监听器,以确保在开始使用 Cordova 之前已加载 Cordova。

document.getElementById("cameraTakePicture").addEventListener 
   ("click", cameraTakePicture); 

步骤 4 - 添加函数(拍照)

我们将创建cameraTakePicture函数,该函数作为回调传递给我们的事件监听器。当点击按钮时,它将被触发。在此函数中,我们将调用插件 API 提供的navigator.camera全局对象。如果拍照成功,数据将发送到onSuccess回调函数,否则将显示带有错误消息的警报。我们将此代码放在index.js的底部。

function cameraTakePicture() { 
   navigator.camera.getPicture(onSuccess, onFail, {  
      quality: 50, 
      destinationType: Camera.DestinationType.DATA_URL 
   });  
   
   function onSuccess(imageData) { 
      var image = document.getElementById('myImage'); 
      image.src = "data:image/jpeg;base64," + imageData; 
   }  
   
   function onFail(message) { 
      alert('Failed because: ' + message); 
   } 
}

运行应用程序并按下按钮时,将触发原生相机。

Cordova Camera Take Picture

拍摄并保存图片后,它将显示在屏幕上。

Cordova Camera Display Image

相同的过程可用于从本地文件系统获取图像。唯一的区别是上一步中创建的函数。您可以看到已添加sourceType可选参数。

步骤 1 B

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugincamera

步骤 2 B

<button id = "cameraGetPicture">GET PICTURE</button>

步骤 3 B

document.getElementById("cameraGetPicture").addEventListener("click", cameraGetPicture); 

步骤 4 B

function cameraGetPicture() {
   navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
      destinationType: Camera.DestinationType.DATA_URL,
      sourceType: Camera.PictureSourceType.PHOTOLIBRARY
   });

   function onSuccess(imageURL) {
      var image = document.getElementById('myImage');
      image.src = imageURL;
   }

   function onFail(message) {
      alert('Failed because: ' + message);
   }

}

当我们按下第二个按钮时,将打开文件系统而不是相机,以便我们可以选择要显示的图像。

Cordova Camera File System

此插件提供了许多可选参数用于自定义。

序号 参数和详情
1

quality

图像质量,范围为 0-100。默认为 50。

2

destinationType

DATA_URL0 返回 base64 编码的字符串。

FILE_URI1 返回图像文件 URI。

NATIVE_URI2 返回图像原生 URI。

3

sourceType

PHOTOLIBRARY0 打开照片库。

CAMERA1 打开原生相机。

SAVEDPHOTOALBUM2 打开已保存的照片相册。

4

allowEdit

允许图像编辑。

5

encodingType

JPEG0 返回 JPEG 编码的图像。

PNG1 返回 PNG 编码的图像。

6

targetWidth

图像缩放宽度(像素)。

7

targetHeight

图像缩放高度(像素)。

8

mediaType

PICTURE0 只允许选择图片。

VIDEO1 只允许选择视频。

ALLMEDIA2 允许选择所有媒体类型。

9

correctOrientation

用于校正图像的方向。

10

saveToPhotoAlbum

用于将图像保存到照片相册。

11

popoverOptions

用于在 IOS 上设置弹出窗口位置。

12

cameraDirection

FRONT0 前置摄像头。

BACK1 后置摄像头。

ALLMEDIA

Cordova - 联系人

此插件用于访问设备的联系人数据库。在本教程中,我们将向您展示如何创建、查询和删除联系人。

步骤 1 - 安装 Contacts 插件

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugincontacts

步骤 2 - 添加按钮

该按钮将用于调用createContact函数。我们将其放在index.html文件的div class = "app"中。

<button id = "createContact">ADD CONTACT</button>
<button id = "findContact">FIND CONTACT</button>
<button id = "deleteContact">DELETE CONTACT</button>

步骤 2 - 添加事件监听器

打开index.js并将以下代码片段复制到onDeviceReady函数中。

document.getElementById("createContact").addEventListener("click", createContact);
document.getElementById("findContact").addEventListener("click", findContact);
document.getElementById("deleteContact").addEventListener("click", deleteContact);

步骤 3A - 回调函数 (navigator.contacts.create)

现在,我们没有任何联系人存储在设备上。

Cordova Contact Empty

我们的第一个回调函数将调用navigator.contacts.create方法,我们可以在其中指定新的联系人数据。这将创建一个联系人并将其分配给myContact变量,但它不会存储在设备上。要存储它,我们需要调用save方法并创建成功和错误回调函数。

function createContact() {
   var myContact = navigator.contacts.create({"displayName": "Test User"});
   myContact.save(contactSuccess, contactError);
    
   function contactSuccess() {
      alert("Contact is saved!");
   }
	
   function contactError(message) {
      alert('Failed because: ' + message);
   }
	
}

单击添加联系人按钮后,新的联系人将存储到设备联系人列表中。

Cordova Contact Create

步骤 3B - 回调函数 (navigator.contacts.find)

我们的第二个回调函数将查询所有联系人。我们将使用navigator.contacts.find方法。options 对象具有 filter 参数,用于指定搜索过滤器。multiple = true 用于因为我们想要返回设备上的所有联系人。field 键用于按displayName搜索联系人,因为我们在保存联系人时使用了它。

设置选项后,我们使用find方法查询联系人。将为找到的每个联系人触发警报消息。

function findContacts() {
   var options = new ContactFindOptions();
   options.filter = "";
   options.multiple = true;
   fields = ["displayName"];
   navigator.contacts.find(fields, contactfindSuccess, contactfindError, options);
    
   function contactfindSuccess(contacts) {
      for (var i = 0; i < contacts.length; i++) {
         alert("Display Name = " + contacts[i].displayName);
      }
   }
	
   function contactfindError(message) {
      alert('Failed because: ' + message);
   }
	
}

按下查找联系人按钮后,将触发一个警报弹出窗口,因为我们只保存了一个联系人。

Cordova Contacts Find

步骤 3C - 回调函数 (delete)

此步骤中,我们将再次使用 find 方法,但这次我们将设置不同的选项。将options.filter设置为搜索必须删除的测试用户。在contactfindSuccess回调函数返回我们想要的联系人后,我们将使用remove方法将其删除,该方法需要其自身的成功和错误回调函数。

function deleteContact() {
   var options = new ContactFindOptions();
   options.filter = "Test User";
   options.multiple = false;
   fields = ["displayName"];
   navigator.contacts.find(fields, contactfindSuccess, contactfindError, options);

   function contactfindSuccess(contacts) {
      var contact = contacts[0];
      contact.remove(contactRemoveSuccess, contactRemoveError);

      function contactRemoveSuccess(contact) {
         alert("Contact Deleted");
      }

      function contactRemoveError(message) {
         alert('Failed because: ' + message);
      }
   }

   function contactfindError(message) {
      alert('Failed because: ' + message);
   }
	
}

现在,设备上只有一个联系人。我们将手动添加另一个联系人,以向您展示删除过程。

Cordova Contacts Multiple

现在,我们将单击删除联系人按钮以删除测试用户。如果我们再次检查联系人列表,我们将看到测试用户已不存在。

Cordova Contact Deleted

Cordova - 设备

此插件用于获取有关用户设备的信息。

步骤 1 - 安装设备插件

要安装此插件,我们需要在命令提示符中运行以下代码段。

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-device

步骤 2 - 添加按钮

我们将像使用其他 Cordova 插件一样使用此插件。让我们在index.html文件中添加一个按钮。此按钮将用于获取有关设备的信息。

<button id = "cordovaDevice">CORDOVA DEVICE</button>

步骤 3 - 添加事件监听器

Cordova 插件在deviceready事件之后可用,因此我们将事件监听器放在index.js中的onDeviceReady函数内。

document.getElementById("cordovaDevice").addEventListener("click", cordovaDevice);	

步骤 4 - 创建函数

以下函数将展示如何使用插件提供的所有可能性。我们将将其放在index.js中。

function cordovaDevice() {
   alert("Cordova version: " + device.cordova + "\n" +
      "Device model: " + device.model + "\n" +
      "Device platform: " + device.platform + "\n" +
      "Device UUID: " + device.uuid + "\n" +
      "Device version: " + device.version);
}

当我们单击CORDOVA 设备按钮时,警报将显示 Cordova 版本、设备型号、平台、UUID 和设备版本。

Cordova Device Alert

Cordova - 加速度计

加速度计插件也称为device-motion。它用于跟踪三维空间中的设备运动。

步骤 1 - 安装加速度计插件

我们将使用cordova-CLI安装此插件。在命令提示符窗口中键入以下代码。

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-device-motion 

步骤 2 - 添加按钮

在此步骤中,我们将在index.html文件中添加两个按钮。一个用于获取当前加速度,另一个用于监视加速度变化。

<button id = "getAcceleration">GET ACCELERATION</button>
<button id = "watchAcceleration">WATCH ACCELERATION</button>

步骤 3 - 添加事件监听器

现在,让我们将事件监听器添加到index.jsonDeviceReady函数中的按钮。

document.getElementById("getAcceleration").addEventListener("click", getAcceleration);
document.getElementById("watchAcceleration").addEventListener(
   "click", watchAcceleration);

步骤 4 - 创建函数

现在,我们将创建两个函数。第一个函数用于获取当前加速度,第二个函数将监视加速度,并且有关加速度的信息将每三秒触发一次。我们还将添加由setTimeout函数包装的clearWatch函数,以便在指定的时间范围内停止监视加速度。frequency参数用于每三秒触发一次回调函数。

function getAcceleration() {
   navigator.accelerometer.getCurrentAcceleration(
      accelerometerSuccess, accelerometerError);

   function accelerometerSuccess(acceleration) {
      alert('Acceleration X: ' + acceleration.x + '\n' +
         'Acceleration Y: ' + acceleration.y + '\n' +
         'Acceleration Z: ' + acceleration.z + '\n' +
         'Timestamp: '      + acceleration.timestamp + '\n');
   };

   function accelerometerError() {
      alert('onError!');
   };
}

function watchAcceleration() {
   var accelerometerOptions = {
      frequency: 3000
   }
   var watchID = navigator.accelerometer.watchAcceleration(
      accelerometerSuccess, accelerometerError, accelerometerOptions);

   function accelerometerSuccess(acceleration) {
      alert('Acceleration X: ' + acceleration.x + '\n' +
         'Acceleration Y: ' + acceleration.y + '\n' +
         'Acceleration Z: ' + acceleration.z + '\n' +
         'Timestamp: '      + acceleration.timestamp + '\n');

      setTimeout(function() {
         navigator.accelerometer.clearWatch(watchID);
      }, 10000);
   };

   function accelerometerError() {
      alert('onError!');
   };
	
}

现在,如果我们按下获取加速度按钮,我们将获得当前加速度值。如果我们按下监视加速度按钮,警报将每三秒触发一次。显示第三个警报后,将调用clearWatch函数,并且我们将不会收到更多警报,因为我们将超时设置为 10000 毫秒。

Cordova Acceleration

Cordova - 设备方向

指南针用于显示相对于地理北方基点的方向。

步骤 1 - 安装设备方向插件

打开命令提示符窗口并运行以下命令。

C:\Users\username\Desktop\CordovaProject>cordova plugin 
   add cordova-plugindevice-orientation

步骤 2 - 添加按钮

此插件类似于加速度插件。现在让我们在index.html中创建两个按钮。

<button id = "getOrientation">GET ORIENTATION</button>
<button id = "watchOrientation">WATCH ORIENTATION</button>

步骤 3 - 添加事件监听器

现在,我们将事件监听器添加到index.jsonDeviceReady函数内。

document.getElementById("getOrientation").addEventListener("click", getOrientation);
document.getElementById("watchOrientation").addEventListener("click", watchOrientation);

步骤 4 - 创建函数

我们将创建两个函数;第一个函数将生成当前加速度,另一个函数将检查方向变化。您可以看到我们再次使用frequency选项来监视每三秒发生的更改。

function getOrientation() {
   navigator.compass.getCurrentHeading(compassSuccess, compassError);

   function compassSuccess(heading) {
      alert('Heading: ' + heading.magneticHeading);
   };

   function compassError(error) {
      alert('CompassError: ' + error.code);
   };
}

function watchOrientation(){
   var compassOptions = {
      frequency: 3000
   }
   var watchID = navigator.compass.watchHeading(compassSuccess, 
      compassError, compassOptions);

   function compassSuccess(heading) {
      alert('Heading: ' + heading.magneticHeading);

      setTimeout(function() {
         navigator.compass.clearWatch(watchID);
      }, 10000);
   };

   function compassError(error) {
      alert('CompassError: ' + error.code);
   };
}

由于指南针插件与加速度插件几乎相同,因此这次我们将向您展示一个错误代码。某些设备没有指南针工作所需的磁力传感器。如果您的设备没有它,则会显示以下错误。

Cordova Compass Error

Cordova - 对话框

Cordova 对话框插件将调用平台本机对话框 UI 元素。

步骤 1 - 安装对话框

命令提示符窗口中键入以下命令以安装此插件。

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-dialogs

步骤 2 - 添加按钮

现在让我们打开index.html并添加四个按钮,每个对话框类型一个。

<button id = "dialogAlert">ALERT</button>
<button id = "dialogConfirm">CONFIRM</button>
<button id = "dialogPrompt">PROMPT</button>
<button id = "dialogBeep">BEEP</button>

步骤 3 - 添加事件监听器

现在,我们将事件监听器添加到index.jsonDeviceReady函数内。一旦单击相应的按钮,监听器将调用回调函数。

document.getElementById("dialogAlert").addEventListener("click", dialogAlert);
document.getElementById("dialogConfirm").addEventListener("click", dialogConfirm);
document.getElementById("dialogPrompt").addEventListener("click", dialogPrompt);
document.getElementById("dialogBeep").addEventListener("click", dialogBeep);	

步骤 4A - 创建警报函数

由于我们添加了四个事件监听器,因此我们现在将在index.js中为所有事件监听器创建回调函数。第一个是dialogAlert

function dialogAlert() {
   var message = "I am Alert Dialog!";
   var title = "ALERT";
   var buttonName = "Alert Button";
   navigator.notification.alert(message, alertCallback, title, buttonName);
   
   function alertCallback() {
      console.log("Alert is Dismissed!");
   }
}

如果我们单击警报按钮,我们将看到警报对话框。

Cordova Alert Dialog

当我们单击对话框按钮时,控制台将显示以下输出。

Cordova Alert DIalog Dismissed

步骤 4B - 创建确认函数

我们需要创建的第二个函数是dialogConfirm函数。

function dialogConfirm() {
   var message = "Am I Confirm Dialog?";
   var title = "CONFIRM";
   var buttonLabels = "YES,NO";
   navigator.notification.confirm(message, confirmCallback, title, buttonLabels);

   function confirmCallback(buttonIndex) {
      console.log("You clicked " + buttonIndex + " button!");
   }
	
}

按下确认按钮后,将弹出新的对话框。

Cordova Dialog Confirm

我们将单击按钮来回答问题。控制台将显示以下输出。

Cordova Platform Confirm Dismissed

步骤 4C - 创建提示函数

第三个函数是dialogPrompt函数。这允许用户在对话框输入元素中键入文本。

function dialogPrompt() {
   var message = "Am I Prompt Dialog?";
   var title = "PROMPT";
   var buttonLabels = ["YES","NO"];
   var defaultText = "Default"
   navigator.notification.prompt(message, promptCallback, 
      title, buttonLabels, defaultText);

   function promptCallback(result) {
      console.log("You clicked " + result.buttonIndex + " button! \n" + 
         "You entered " +  result.input1);
   }
	
}

提示按钮将触发一个对话框,如下面的屏幕截图所示。

Cordova Dialog Prompt

在此对话框中,我们可以选择键入文本。我们将此文本与单击的按钮一起记录到控制台中。

Cordova Dialog Prompt Dismissed

步骤 4D - 创建蜂鸣声函数

最后一个是dialogBeep函数。这用于调用音频蜂鸣通知。times参数将设置蜂鸣信号的重复次数。

function dialogBeep() {
   var times = 2;
   navigator.notification.beep(times);
}

当我们单击蜂鸣声按钮时,我们将听到两次通知声音,因为times值设置为2

Cordova - 文件系统

此插件用于操作用户设备上的本机文件系统。

步骤 1 - 安装文件插件

我们需要在命令提示符中运行以下代码来安装此插件。

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-file

步骤 2 - 添加按钮

在此示例中,我们将向您展示如何创建文件、写入文件、读取文件和删除文件。为此,我们将在index.html中创建四个按钮。我们还将添加textarea,其中将显示我们文件的内容。

<button id = "createFile">CREATE FILE</button>
<button id = "writeFile">WRITE FILE</button>
<button id = "readFile">READ FILE</button>
<button id = "removeFile">DELETE FILE</button>
<textarea id = "textarea"></textarea>

步骤 3 - 添加事件监听器

我们将事件监听器添加到index.js中的onDeviceReady函数内,以确保在使用插件之前已启动所有内容。

document.getElementById("createFile").addEventListener("click", createFile);
document.getElementById("writeFile").addEventListener("click", writeFile);
document.getElementById("readFile").addEventListener("click", readFile);
document.getElementById("removeFile").addEventListener("click", removeFile);

步骤 4A - 创建文件函数

该文件将在设备上的应用程序根文件夹中创建。为了能够访问根文件夹,您需要为您的文件夹提供超级用户访问权限。在本例中,根文件夹的路径为\data\data\com.example.hello\cache。目前此文件夹为空。

Cordova File Root Empty

现在让我们添加一个将创建 log.txt 文件的函数。我们将把这段代码写在index.js中,并向文件系统发送请求。此方法使用 WINDOW.TEMPORARY 或 WINDOW.PERSISTENT。存储所需的大小以字节为单位(在本例中为 5MB)。

function createFile() {
   var type = window.TEMPORARY;
   var size = 5*1024*1024;
   window.requestFileSystem(type, size, successCallback, errorCallback)

   function successCallback(fs) {
      fs.root.getFile('log.txt', {create: true, exclusive: true}, function(fileEntry) {
         alert('File creation successfull!')
      }, errorCallback);
   }

   function errorCallback(error) {
      alert("ERROR: " + error.code)
   }
	
}

现在我们可以按下创建文件按钮,警报将确认我们已成功创建文件。

Cordova File Create

现在我们可以再次检查我们的应用程序根文件夹,我们可以在那里找到我们的新文件。

Cordova File Root

步骤 4B - 写入文件函数

在此步骤中,我们将一些文本写入我们的文件。我们将再次向文件系统发送请求,然后创建文件写入器才能写入我们分配给blob变量的Lorem Ipsum文本。

function writeFile() {
   var type = window.TEMPORARY;
   var size = 5*1024*1024;
   window.requestFileSystem(type, size, successCallback, errorCallback)

   function successCallback(fs) {
      fs.root.getFile('log.txt', {create: true}, function(fileEntry) {

         fileEntry.createWriter(function(fileWriter) {
            fileWriter.onwriteend = function(e) {
               alert('Write completed.');
            };

            fileWriter.onerror = function(e) {
               alert('Write failed: ' + e.toString());
            };

            var blob = new Blob(['Lorem Ipsum'], {type: 'text/plain'});
            fileWriter.write(blob);
         }, errorCallback);
      }, errorCallback);
   }

   function errorCallback(error) {
      alert("ERROR: " + error.code)
   }
}

按下写入文件按钮后,警报将告知我们写入成功,如下面的屏幕截图所示。

Cordova File Write

现在我们可以打开log.txt并看到里面写着Lorem Ipsum

Cordova FIle Root Log Text

步骤 4C - 读取文件函数

在此步骤中,我们将读取 log.txt 文件并将其显示在textarea元素中。我们将向文件系统发送请求并获取文件对象,然后我们创建reader。加载 reader 后,我们将返回的值分配给textarea

function readFile() {
   var type = window.TEMPORARY;
   var size = 5*1024*1024;
   window.requestFileSystem(type, size, successCallback, errorCallback)

   function successCallback(fs) {
      fs.root.getFile('log.txt', {}, function(fileEntry) {

         fileEntry.file(function(file) {
            var reader = new FileReader();

            reader.onloadend = function(e) {
               var txtArea = document.getElementById('textarea');
               txtArea.value = this.result;
            };
            reader.readAsText(file);
         }, errorCallback);
      }, errorCallback);
   }

   function errorCallback(error) {
      alert("ERROR: " + error.code)
   }
}	

当我们单击读取文件按钮时,文件中的文本将写入textarea

Cordova File Read

步骤 4D - 删除文件函数

最后,我们将创建用于删除log.txt文件的函数。

function removeFile() {
   var type = window.TEMPORARY;
   var size = 5*1024*1024;
   window.requestFileSystem(type, size, successCallback, errorCallback)

   function successCallback(fs) {
      fs.root.getFile('log.txt', {create: false}, function(fileEntry) {

         fileEntry.remove(function() {
            alert('File removed.');
         }, errorCallback);
      }, errorCallback);
   }

   function errorCallback(error) {
      alert("ERROR: " + error.code)
   }
}	

现在我们可以按下删除文件按钮以从应用程序根文件夹中删除文件。警报将通知我们删除操作成功。

Cordova File Delete

如果我们检查应用程序根文件夹,我们将看到它为空。

Cordova File Root Empty

Cordova - 文件传输

此插件用于上传和下载文件。

步骤 1 - 安装文件传输插件

我们需要打开命令提示符并运行以下命令来安装插件。

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-file-transfer

步骤 2 - 创建按钮

在本章中,我们将向您展示如何上传和下载文件。让我们在index.html中创建两个按钮

<button id = "uploadFile">UPLOAD</button>
<button id = "downloadFile">DOWNLOAD</button>

步骤 3 - 添加事件监听器

事件监听器将在index.js中的onDeviceReady函数内创建。我们正在添加click事件和callback函数。

document.getElementById("uploadFile").addEventListener("click", uploadFile);
document.getElementById("downloadFile").addEventListener("click", downloadFile);

步骤 4A - 下载函数

此函数将用于从服务器下载文件到设备。我们将文件上传到postimage.org以简化操作。您可能希望使用您自己的服务器。该函数位于index.js中,并在按下相应的按钮时触发。uri是服务器下载链接,fileURI是我们设备上 DCIM 文件夹的路径。

function downloadFile() {
   var fileTransfer = new FileTransfer();
   var uri = encodeURI("http://s14.postimg.org/i8qvaxyup/bitcoin1.jpg");
   var fileURL =  "///storage/emulated/0/DCIM/myFile";

   fileTransfer.download(
      uri, fileURL, function(entry) {
         console.log("download complete: " + entry.toURL());
      },
		
      function(error) {
         console.log("download error source " + error.source);
         console.log("download error target " + error.target);
         console.log("download error code" + error.code);
      },
		
      false, {
         headers: {
            "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
         }
      }
   );
}

按下下载按钮后,文件将从postimg.org服务器下载到我们的移动设备。我们可以检查指定的文件夹并看到myFile在那里。

Cordova File Transfer Download

控制台输出将如下所示:

Cordova File Transfer Download Log

步骤 4B - 上传函数

现在让我们创建一个函数来获取文件并将其上传到服务器。同样,我们希望尽可能简化此操作,因此我们将使用posttestserver.com在线服务器进行测试。uri 值将链接到posttestserver的发布。

function uploadFile() {
   var fileURL = "///storage/emulated/0/DCIM/myFile"
   var uri = encodeURI("http://posttestserver.com/post.php");
   var options = new FileUploadOptions();
   options.fileKey = "file";
   options.fileName = fileURL.substr(fileURL.lastIndexOf('/')+1);
   options.mimeType = "text/plain";
   
   var headers = {'headerParam':'headerValue'};
   options.headers = headers;
   var ft = new FileTransfer();
   ft.upload(fileURL, uri, onSuccess, onError, options);

   function onSuccess(r) {
      console.log("Code = " + r.responseCode);
      console.log("Response = " + r.response);
      console.log("Sent = " + r.bytesSent);
   }

   function onError(error) {
      alert("An error has occurred: Code = " + error.code);
      console.log("upload error source " + error.source);
      console.log("upload error target " + error.target);
   }
	
}

现在我们可以按下上传按钮来触发此函数。我们将获得控制台输出作为上传成功的确认。

Cordova File Transfer Upload Log

我们还可以检查服务器以确保文件已上传。

Cordova File Transfer Upload Server Response

Cordova - 地理位置

地理位置用于获取有关设备纬度和经度的信息。

步骤 1 - 安装插件

我们可以通过在命令提示符窗口中键入以下代码来安装此插件。

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-geolocation

步骤 2 - 添加按钮

在本教程中,我们将向您展示如何获取当前位置以及如何监视变化。我们首先需要创建将调用这些函数的按钮。

<button id = "getPosition">CURRENT POSITION</button>
<button id = "watchPosition">WATCH POSITION</button>

步骤 3 - 添加事件监听器

现在我们要在设备准备就绪时添加事件监听器。我们将下面的代码示例添加到index.js中的onDeviceReady函数中。

document.getElementById("getPosition").addEventListener("click", getPosition);
document.getElementById("watchPosition").addEventListener("click", watchPosition);	

步骤 3 - 创建函数

必须为两个事件监听器创建两个函数。一个用于获取当前位置,另一个用于监视位置。

function getPosition() {
   var options = {
      enableHighAccuracy: true,
      maximumAge: 3600000
   }
   var watchID = navigator.geolocation.getCurrentPosition(onSuccess, onError, options);

   function onSuccess(position) {
      alert('Latitude: '          + position.coords.latitude          + '\n' +
         'Longitude: '         + position.coords.longitude         + '\n' +
         'Altitude: '          + position.coords.altitude          + '\n' +
         'Accuracy: '          + position.coords.accuracy          + '\n' +
         'Altitude Accuracy: ' + position.coords.altitudeAccuracy  + '\n' +
         'Heading: '           + position.coords.heading           + '\n' +
         'Speed: '             + position.coords.speed             + '\n' +
         'Timestamp: '         + position.timestamp                + '\n');
   };

   function onError(error) {
      alert('code: '    + error.code    + '\n' + 'message: ' + error.message + '\n');
   }
}

function watchPosition() {
   var options = {
      maximumAge: 3600000,
      timeout: 3000,
      enableHighAccuracy: true,
   }
   var watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);

   function onSuccess(position) {
      alert('Latitude: '          + position.coords.latitude          + '\n' +
         'Longitude: '         + position.coords.longitude         + '\n' +
         'Altitude: '          + position.coords.altitude          + '\n' +
         'Accuracy: '          + position.coords.accuracy          + '\n' +
         'Altitude Accuracy: ' + position.coords.altitudeAccuracy  + '\n' +
         'Heading: '           + position.coords.heading           + '\n' +
         'Speed: '             + position.coords.speed             + '\n' +
         'Timestamp: '         + position.timestamp                + '\n');
   };

   function onError(error) {
      alert('code: '    + error.code    + '\n' +'message: ' + error.message + '\n');
   }
}

在上例中,我们使用了两种方法:getCurrentPositionwatchPosition。这两个函数都使用三个参数。一旦我们单击当前位置按钮,警报将显示地理位置值。

Cordova Geolocation

如果我们单击监视位置按钮,相同的警报将每三秒触发一次。这样,我们可以跟踪用户设备的移动变化。

注意

此插件使用 GPS。有时它无法及时返回值,请求将返回超时错误。这就是为什么我们指定enableHighAccuracy: truemaximumAge: 3600000。这意味着如果请求没有及时完成,我们将使用最后一个已知值。在本例中,我们将maximumAge设置为 3600000 毫秒。

Cordova - 全球化

此插件用于获取有关用户区域设置语言、日期和时区、货币等的信息。

步骤 1 - 安装全球化插件

打开命令提示符并通过键入以下代码安装插件

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-globalization

步骤 2 - 添加按钮

我们将向index.html添加几个按钮,以便能够调用我们稍后将创建的不同方法。

<button id = "getLanguage">LANGUAGE</button>
<button id = "getLocaleName">LOCALE NAME</button>
<button id = "getDate">DATE</button>
<button id = "getCurrency">CURRENCY</button>

步骤 3 - 添加事件监听器

为了确保在使用应用和Cordova之前已加载完毕,事件监听器将添加到index.js 文件中的getDeviceReady 函数内。

document.getElementById("getLanguage").addEventListener("click", getLanguage);
document.getElementById("getLocaleName").addEventListener("click", getLocaleName);
document.getElementById("getDate").addEventListener("click", getDate);
document.getElementById("getCurrency").addEventListener("click", getCurrency);

步骤 4A - 语言函数

我们使用的第一个函数返回客户端设备的BCP 47语言标签。我们将使用getPreferredLanguage 方法。该函数有两个参数:onSuccess 和onError。我们将此函数添加到index.js中。

function getLanguage() {
   navigator.globalization.getPreferredLanguage(onSuccess, onError);

   function onSuccess(language) {
      alert('language: ' + language.value + '\n');
   }

   function onError(){
      alert('Error getting language');
   }
}

按下LANGUAGE 按钮后,屏幕上将显示警报。

Cordova Globalization Language

步骤 4B - 地区设置函数

此函数返回客户端本地设置的BCP 47标签。此函数与我们之前创建的函数类似。唯一的区别是这次我们使用的是getLocaleName 方法。

function getLocaleName() {
   navigator.globalization.getLocaleName(onSuccess, onError);

   function onSuccess(locale) {
      alert('locale: ' + locale.value);
   }

   function onError(){
      alert('Error getting locale');
   }
}

单击LOCALE 按钮时,警报将显示我们的区域设置标签。

Cordova Globalization Locale

步骤 4C - 日期函数

此函数用于根据客户端的区域设置和时区设置返回日期。date 参数是当前日期,options 参数是可选的。

function getDate() {
   var date = new Date();

   var options = {
      formatLength:'short',
      selector:'date and time'
   }
   navigator.globalization.dateToString(date, onSuccess, onError, options);

   function onSuccess(date) {
      alert('date: ' + date.value);
   }

   function onError(){
      alert('Error getting dateString');
   }
}

现在我们可以运行应用程序并按下DATE 按钮来查看当前日期。

Cordova Globalization Date

我们将展示的最后一个函数是根据客户端的设备设置和ISO 4217货币代码返回货币值。您可以看到概念相同。

function getCurrency() {
   var currencyCode = 'EUR';
   navigator.globalization.getCurrencyPattern(currencyCode, onSuccess, onError);

   function onSuccess(pattern) {
      alert('pattern: '  + pattern.pattern  + '\n' +
         'code: '     + pattern.code     + '\n' +
         'fraction: ' + pattern.fraction + '\n' +
         'rounding: ' + pattern.rounding + '\n' +
         'decimal: '  + pattern.decimal  + '\n' +
         'grouping: ' + pattern.grouping);
   }

   function onError(){
      alert('Error getting pattern');
   }
}

CURRENCY 按钮将触发警报,向用户显示货币模式。

Cordova Globalization Currency

此插件提供其他方法。您可以在下表中查看所有方法。

方法 参数 详情
getPreferredLanguage onSuccess, onError 返回客户端当前语言。
getLocaleName onSuccess, onError 返回客户端当前区域设置。
dateToString date, onSuccess, onError, options 根据客户端的区域设置和时区返回日期。
stringToDate dateString, onSuccess, onError, options 根据客户端的设置解析日期。
getCurrencyPattern currencyCode, onSuccess, onError 返回客户端的货币模式。
getDatePattern onSuccess, onError, options 返回客户端的日期模式。
getDateNames onSuccess, onError, options 根据客户端的设置返回月份、星期或日期名称的数组。
isDayLightSavingsTime date, successCallback, errorCallback 用于根据客户端的时区和日历确定夏令时是否启用。
getFirstDayOfWeek onSuccess, onError 返回根据客户端设置的星期第一天。
numberToString number, onSuccess, onError, options 根据客户端的设置返回数字。
stringToNumber string, onSuccess, onError, options 根据客户端的设置解析数字。
getNumberPattern onSuccess, onError, options 返回根据客户端设置的数字模式。

Cordova - InAppBrowser

此插件用于在Cordova应用内打开网页浏览器。

步骤 1 - 安装插件

在我们能够使用它之前,需要在命令提示符窗口中安装此插件。

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-inappbrowser

步骤 2 - 添加按钮

我们将添加一个按钮,用于在index.html中打开inAppBrowser窗口。

步骤 3 - 添加事件监听器

现在让我们在index.js中的onDeviceReady函数中为我们的按钮添加事件监听器。

document.getElementById("openBrowser").addEventListener("click", openBrowser);

步骤 4 - 创建函数

在此步骤中,我们创建一个函数,该函数将在我们的应用程序内打开浏览器。我们将其分配给ref变量,稍后可以使用它来添加事件监听器。

function openBrowser() {
   var url = 'https://cordova.net.cn';
   var target = '_blank';
   var options = "location = yes"
   var ref = cordova.InAppBrowser.open(url, target, options);
   
   ref.addEventListener('loadstart', loadstartCallback);
   ref.addEventListener('loadstop', loadstopCallback);
   ref.addEventListener('loaderror', loaderrorCallback);
   ref.addEventListener('exit', exitCallback);

   function loadstartCallback(event) {
      console.log('Loading started: '  + event.url)
   }

   function loadstopCallback(event) {
      console.log('Loading finished: ' + event.url)
   }

   function loaderrorCallback(error) {
      console.log('Loading error: ' + error.message)
   }

   function exitCallback() {
      console.log('Browser is closed...')
   }
}

如果我们按下BROWSER按钮,我们将在屏幕上看到以下输出。

Cordova InAppBrowser Open

控制台也将监听事件。当URL开始加载时,loadstart事件将触发;当URL加载完毕时,loadstop事件将触发。我们可以在控制台中看到它。

Cordova InAppBrowser Console

关闭浏览器后,将触发exit事件。

Cordova InAppBrowser Exit Console

InAppBrowser窗口还有其他可能的选项。我们将在下表中解释。

序号 选项 & 详情
1

location

用于启用或禁用浏览器位置栏。值为yesno

2

hidden

用于隐藏或显示inAppBrowser。值为yesno

3

clearCache

用于清除浏览器Cookie缓存。值为yesno

4

clearsessioncache

用于清除会话Cookie缓存。值为yesno

5

zoom

用于隐藏或显示Android浏览器的缩放控件。值为yesno

6

hardwareback

yes表示使用硬件后退按钮在浏览器历史记录中后退。no表示单击后退按钮后关闭浏览器。

我们可以使用ref(引用)变量来实现其他一些功能。我们将向您展示一些简单的示例。要删除事件监听器,可以使用:

ref.removeEventListener(eventname, callback); 

要关闭InAppBrowser,可以使用:

ref.close();

如果我们打开了隐藏窗口,我们可以显示它:

ref.show();

甚至可以将JavaScript代码注入InAppBrowser:

var details = "javascript/file/url"
ref.executeScript(details, callback);

相同的概念可用于注入CSS:

var details = "css/file/url"
ref.inserCSS(details, callback);

Cordova - 媒体

Cordova媒体插件用于在Cordova应用程序中录制和播放音频声音。

步骤 1 - 安装媒体插件

可以通过在命令提示符窗口中运行以下代码来安装媒体插件。

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-media

步骤 2 - 添加按钮

在本教程中,我们将创建一个简单的音频播放器。让我们在index.html中创建所需的按钮。

<button id = "playAudio">PLAY</button>
<button id = "pauseAudio">PAUSE</button>
<button id = "stopAudio">STOP</button>
<button id = "volumeUp">VOLUME UP</button>
<button id = "volumeDown">VOLUME DOWN</button>

步骤 3 - 添加事件监听器

现在我们需要在index.js中的onDeviceReady函数内为我们的按钮添加事件监听器。

document.getElementById("playAudio").addEventListener("click", playAudio);
document.getElementById("pauseAudio").addEventListener("click", pauseAudio);
document.getElementById("stopAudio").addEventListener("click", stopAudio);
document.getElementById("volumeUp").addEventListener("click", volumeUp);
document.getElementById("volumeDown").addEventListener("click", volumeDown);

步骤 4A - 播放函数

我们将添加的第一个函数是playAudio。我们在函数外部定义myMedia,因为我们想在稍后添加的函数(暂停、停止、音量增大和音量减小)中使用它。此代码位于index.js文件中。

var myMedia = null;
function playAudio() {
   var src = "/android_asset/www/audio/piano.mp3";

   if(myMedia === null) {
      myMedia = new Media(src, onSuccess, onError);

      function onSuccess() {
         console.log("playAudio Success");
      }

      function onError(error) {
         console.log("playAudio Error: " + error.code);
      }
   }
   myMedia.play();
}

我们可以单击PLAY按钮从src路径开始播放钢琴音乐。

步骤 4B - 暂停和停止函数

我们需要添加的下一个函数是pauseAudiostopAudio

function pauseAudio() {
   if(myMedia) {
      myMedia.pause();
   }
}

function stopAudio() {
   if(myMedia) {
      myMedia.stop(); 
   }
   myMedia = null;
}

现在我们可以通过单击PAUSESTOP按钮来暂停或停止钢琴声音。

步骤 4C - 音量函数

要设置音量,我们可以使用setVolume方法。此方法采用值为01之间的参数。我们将起始值设置为0.5

var volumeValue = 0.5;
function volumeUp() {
   if(myMedia && volumeValue < 1) {
      myMedia.setVolume(volumeValue += 0.1);
   }
}

function volumeDown() {
   if(myMedia && volumeValue > 0) {
      myMedia.setVolume(volumeValue -= 0.1);
   }
}

按下VOLUME UPVOLUME DOWN后,我们可以将音量值更改0.1

下表显示了此插件提供的其他方法。

序号 方法和详情
1

getCurrentPosition

返回音频的当前位置。

2

getDuration

返回音频的时长。

3

play

用于开始或恢复音频。

4

pause

pause

5

用于暂停音频。

release

6

释放底层操作系统的音频资源。

seekTo

7

用于更改音频的位置。

setVolume

8

用于设置音频的音量。

startRecord

9

开始录制音频文件。

stopRecord

10

停止录制音频文件。

stop

Cordova - 媒体捕获

停止播放音频文件。

此插件用于访问设备的捕获选项。

步骤 1 - 安装媒体捕获插件

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-media-capture

步骤 2 - 添加按钮

要安装此插件,我们将打开命令提示符并运行以下代码:

<button id = "audioCapture">AUDIO</button>
<button id = "imageCapture">IMAGE</button>
<button id = "videoCapture">VIDEO</button>

步骤 3 - 添加事件监听器

由于我们想向您展示如何捕获音频、图像和视频,我们将在index.html中创建三个按钮。

document.getElementById("audioCapture").addEventListener("click", audioCapture);
document.getElementById("imageCapture").addEventListener("click", imageCapture);
document.getElementById("videoCapture").addEventListener("click", videoCapture);

下一步是在index.js中的onDeviceReady内添加事件监听器。

步骤 4A - 捕获音频函数

function audioCapture() {
   var options = {
      limit: 1,
      duration: 10
   };
   navigator.device.capture.captureAudio(onSuccess, onError, options);

   function onSuccess(mediaFiles) {
      var i, path, len;
      for (i = 0, len = mediaFiles.length; i < len; i += 1) {
         path = mediaFiles[i].fullPath;
         console.log(mediaFiles);
      }
   }

   function onError(error) {
      navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
   }
}

index.js中的第一个回调函数是audioCapture。要启动录音机,我们将使用captureAudio方法。我们使用两个选项:limit允许每次捕获操作仅录制一个音频剪辑;duration是声音剪辑的秒数。

Cordova Capture Audio

按下AUDIO按钮时,录音机将打开。

Cordova Capture Audio Log

控制台将显示用户捕获的对象数组。

步骤 4B - 捕获图像函数

function imageCapture() {
   var options = {
      limit: 1
   };
   navigator.device.capture.captureImage(onSuccess, onError, options);

   function onSuccess(mediaFiles) {
      var i, path, len;
      for (i = 0, len = mediaFiles.length; i < len; i += 1) {
         path = mediaFiles[i].fullPath;
         console.log(mediaFiles);
      }
   }

   function onError(error) {
      navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
   }
}

捕获图像的函数与上一个函数相同。唯一的区别是这次我们使用的是captureImage方法。

Cordova Capture Image

现在我们可以单击IMAGE按钮启动相机。

Cordova Capture Image Log

拍照时,控制台将记录包含图像对象的数组。

步骤 4C - 捕获视频函数

function videoCapture() {
   var options = {
      limit: 1,
      duration: 10
   };
   navigator.device.capture.captureVideo(onSuccess, onError, options);

   function onSuccess(mediaFiles) {
      var i, path, len;
      for (i = 0, len = mediaFiles.length; i < len; i += 1) {
         path = mediaFiles[i].fullPath;
         console.log(mediaFiles);
      }
   }

   function onError(error) {
      navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error');
   }
}

让我们对捕获视频重复相同的概念。这次我们将使用videoCapture方法。

Cordova Capture Video

如果我们按下VIDEO按钮,相机将打开,我们可以录制视频。

Cordova Capture Video Log

Cordova - 网络信息

保存视频后,控制台将再次返回数组。这次在里面包含视频对象。

此插件提供有关设备网络的信息。

步骤 1 - 安装媒体捕获插件

C:\Users\username\Desktop\CordovaProject>cordova plugin 
   add cordova-plugin-network-information

步骤 2 - 添加按钮

步骤 1 - 安装网络信息插件

<button id = "networkInfo">INFO</button>

步骤 3 - 添加事件监听器

让我们在index.html中创建一个按钮,用于获取有关网络的信息。

document.getElementById("networkInfo").addEventListener("click", networkInfo);
document.addEventListener("offline", onOffline, false);
document.addEventListener("online", onOnline, false);

步骤 4 - 创建函数

我们将在index.js中的onDeviceReady函数内添加三个事件监听器。一个监听我们之前创建的按钮的点击事件,另外两个监听连接状态的变化。

function networkInfo() {
   var networkState = navigator.connection.type;
   var states = {};
   states[Connection.UNKNOWN]  = 'Unknown connection';
   states[Connection.ETHERNET] = 'Ethernet connection';
   states[Connection.WIFI]     = 'WiFi connection';
   states[Connection.CELL_2G]  = 'Cell 2G connection';
   states[Connection.CELL_3G]  = 'Cell 3G connection';
   states[Connection.CELL_4G]  = 'Cell 4G connection';
   states[Connection.CELL]     = 'Cell generic connection';
   states[Connection.NONE]     = 'No network connection';
   alert('Connection type: ' + states[networkState]);
}

function onOffline() {
   alert('You are now offline!');
}

function onOnline() {
   alert('You are now online!');
}

单击按钮后,networkInfo函数将返回有关当前网络连接的信息。我们调用type方法。其他函数是onOfflineonOnline。这些函数监听连接变化,任何变化都将触发相应的警报消息。

Cordova Network Online

当我们连接到网络启动应用程序时,onOnline函数将触发警报。

Cordova Network Info

如果我们按下INFO按钮,警报将显示我们的网络状态。

Cordova Network Offline

Cordova - 启动画面

如果我们断开网络连接,将调用onOffline函数。

此插件用于在应用程序启动时显示启动画面。

步骤 1 - 安装启动画面插件

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-splashscreen

可以通过在命令提示符窗口中运行以下代码来安装启动画面插件。

步骤 2 - 添加启动画面

添加启动画面与添加其他Cordova插件不同。我们需要打开config.xml并在widget元素内添加以下代码片段。

<preference name = "SplashScreen" value = "screen" />

第一个代码片段是SplashScreen。它具有value属性,该属性是platform/android/res/drawable-文件夹中图像的名称。Cordova提供我们在本示例中使用的默认screen.png图像,但您可能希望添加自己的图像。重要的是要添加纵向和横向视图的图像,还要涵盖不同的屏幕尺寸。

<preference name = "SplashScreenDelay" value = "3000" />

我们需要添加的第二个代码片段是SplashScreenDelay。我们将value设置为3000,以在三秒钟后隐藏启动画面。

<preference name = "SplashMaintainAspectRatio" value = "true" />

最后一个偏好设置是可选的。如果值设置为true,则图像不会拉伸以适应屏幕。如果设置为false,则会拉伸。

Cordova Splash Screen

Cordova - 振动

现在,当我们运行应用程序时,我们将看到启动画面。

此插件用于连接到设备的振动功能。

步骤 1 - 安装振动插件

C:\Users\username\Desktop\CordovaProject>cordova plugin add cordova-plugin-vibration

步骤 2 - 添加按钮

我们可以在命令提示符窗口中运行以下代码来安装此插件:

<button id = "vibration">VIBRATION</button>
<button id = "vibrationPattern">PATTERN</button>

步骤 3 - 添加事件监听器

安装插件后,我们可以在index.html中添加稍后将用于触发振动的按钮。

document.getElementById("vibration").addEventListener("click", vibration);
document.getElementById("vibrationPattern").addEventListener("click", vibrationPattern);

现在我们将为index.js中的onDeviceReady添加事件监听器。

步骤 4 - 创建函数

function vibration() {
   var time = 3000;
   navigator.vibrate(time);
}

function vibrationPattern() {
   var pattern = [1000, 1000, 1000, 1000];
   navigator.vibrate(pattern);
}

此插件非常易于使用。我们将创建两个函数。

第二个函数使用了pattern参数。这个数组将指示设备振动一秒,然后等待一秒,然后重复此过程。

Cordova - 白名单

此插件允许我们为应用程序的导航实现白名单策略。当我们创建一个新的Cordova项目时,whitelist插件默认安装并实现。您可以打开config.xml文件查看Cordova提供的allow-intent默认设置。

导航白名单

在下面的简单示例中,我们允许链接到一些外部URL。此代码位于config.xml文件中。默认允许导航到file:// URL。

<allow-navigation href = "http://example.com/*" />

星号 * 用于允许导航到多个值。在上面的示例中,我们允许导航到example.com的所有子域。同样的方法也适用于协议或主机的前缀。

<allow-navigation href = "*://*.example.com/*" />

意图白名单

还有一个allow-intent元素,用于指定允许打开系统的URL。您可以在config.xml中看到,Cordova已经为我们允许了大部分需要的链接。

网络请求白名单

当您查看config.xml文件时,会看到<access origin="*" />元素。此元素允许通过Cordova hooks向我们的应用程序发出所有网络请求。如果您只想允许特定请求,可以将其从config.xml中删除并自行设置。

这与之前的示例使用相同的原理。

<access origin = "http://example.com" />

这将允许来自http://example.com的所有网络请求。

内容安全策略

您可以在index.htmlhead元素中查看应用程序的当前安全策略。

<meta http-equiv = "Content-Security-Policy" content = "default-src 
   'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 
   'self' 'unsafe-inline'; media-src *">

这是默认配置。如果您想允许来自同一来源和example.com的所有内容,则可以使用:

<meta http-equiv = "Content-Security-Policy" content = "default-src 'self' foo.com">

您也可以允许所有内容,但将CSS和JavaScript限制在同一来源。

<meta http-equiv = "Content-Security-Policy" content = "default-src *; 
   style-src 'self' 'unsafe-inline'; script-src 'self' 
   'unsafe-inline' 'unsafe-eval'">

由于这是一个初学者教程,我们推荐使用Cordova默认选项。一旦您熟悉Cordova,您可以尝试一些不同的值。

Cordova - 最佳实践

Cordova用于创建混合移动应用程序,因此在为项目选择它之前,您需要考虑这一点。以下是Cordova应用程序开发的最佳实践。

单页应用程序

这是所有Cordova应用程序的推荐设计。SPA使用客户端路由器和加载在单个页面(通常是index.html)上的导航。路由通过AJAX处理。如果您遵循我们的教程,您可能已经注意到,几乎每个Cordova插件都需要等到设备准备好才能使用。SPA设计将提高加载速度和整体性能。

触摸事件

由于Cordova用于移动领域,因此使用touchstarttouchend事件代替click事件是自然的。click事件有300毫秒的延迟,因此点击感觉不原生。另一方面,并非所有平台都支持触摸事件。在决定使用哪种事件之前,您应该考虑这一点。

动画

您应该始终使用硬件加速的CSS Transitions代替JavaScript动画,因为它们在移动设备上的性能更好。

存储

尽可能使用存储缓存。移动网络连接通常较差,因此您应该尽量减少应用程序中的网络调用。您还应该处理应用程序的离线状态,因为用户设备有时会处于离线状态。

滚动

大多数情况下,应用程序中第一个缓慢的部分将是滚动列表。有几种方法可以提高应用程序的滚动性能。我们建议使用原生滚动。当列表中有很多项目时,您应该部分加载它们。必要时使用加载器。

图像

图像也会减慢移动应用程序的速度。您应该尽可能使用CSS图像精灵。尝试完美地拟合图像,而不是缩放它。

CSS样式

您应该避免阴影和渐变,因为它们会减慢页面的渲染时间。

简化

浏览器的DOM很慢,因此您应该尝试最大限度地减少DOM操作和DOM元素的数量。

测试

确保您在尽可能多的设备和操作系统版本上测试您的应用程序。如果应用程序在一个设备上运行完美,并不一定意味着它会在其他设备或平台上运行。

广告