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.apache.org';
   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元素的數量。

測試

確保您在儘可能多的裝置和作業系統版本上測試您的應用程式。如果應用程式在一個裝置上執行完美,並不一定意味著它會在其他裝置或平臺上執行。

廣告
© . All rights reserved.