Cordova入門系列(三)Cordova插件調用


版權聲明:本文為博主原創文章,轉載請注明出處

 

 

  上一章我們介紹了cordova android項目是如何運行的,這一章我們介紹cordova的核心內容,插件的調用。演示一個例子,通過cordova插件,去調用攝像頭。

 

一、插件的安裝以及基本信息:

  我們先在項目中安裝調用攝像頭的插件cordova-plugin-camera,cd到hello下,執行:

cordova plugin add cordova-plugin-camera

  然后它會為我們的hello/plugins文件夾下添加cordova-plugin-camera插件(這個是整個這個插件模塊,可用於安卓和ios。卸載插件用cordova plugin remove cordova-plugin-camera);

  同時也會在我們的platforms/android/platform_www/plugins下面添加對應的安卓的插件cordova-plugin-camera(這個是根據對應的平台生成的對應的插件內容,只可用於本安卓平台);

  也會在我們的資源文件夾assets/www/plugins下添加cordova-plugin-camera插件(這個資源文件夾下的所有的文件,才是真正的app運行的時候調用的,加載的文件);

  還會為我們的src下添加org.apache.cordova.camera包以及對應的java文件。

  為什么要在項目中加這么多,這只是cordova的機制,我們不作重點研究。這三個目錄是有不同的作用的,但我們只重點關注assets/www目錄下。

 

  除了上面這些,加完這個插件也會改變一些其他文件的內容,首先看res/xml/config.xml,最后多了一項配置信息:

<feature name="Camera">
        <param name="android-package" value="org.apache.cordova.camera.CameraLauncher" />
</feature>

  feature · name:"js中間件通過它調用java方法"。
  (中間件就是我們的插件對應的一些js文件。我們寫的js程序通過這些插件(中間件)去調用Jjava原生內容)
  param · name:"android-package"     value:原生插件類的包類路徑。


  打開assets/www下cordova_plugins.js,發現其中也增加了很多內容:

cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
    {
        "id": "cordova-plugin-camera.Camera",
        "file": "plugins/cordova-plugin-camera/www/CameraConstants.js",
        "pluginId": "cordova-plugin-camera",
        "clobbers": [
            "Camera"
        ]
    },
    {
        "id": "cordova-plugin-camera.CameraPopoverOptions",
        "file": "plugins/cordova-plugin-camera/www/CameraPopoverOptions.js",
        "pluginId": "cordova-plugin-camera",
        "clobbers": [
            "CameraPopoverOptions"
        ]
    },
    {
        "id": "cordova-plugin-camera.camera",
        "file": "plugins/cordova-plugin-camera/www/Camera.js",
        "pluginId": "cordova-plugin-camera",
        "clobbers": [
            "navigator.camera"
        ]
    },
    {
        "id": "cordova-plugin-camera.CameraPopoverHandle",
        "file": "plugins/cordova-plugin-camera/www/CameraPopoverHandle.js",
        "pluginId": "cordova-plugin-camera",
        "clobbers": [
            "CameraPopoverHandle"
        ]
    }
];
module.exports.metadata = 
// TOP OF METADATA
{
    "cordova-plugin-whitelist": "1.3.0",
    "cordova-plugin-compat": "1.0.0",
    "cordova-plugin-camera": "2.3.0"
};
// BOTTOM OF METADATA
});

  id:插件中某個模塊或具體功能的id

  file:這個id對應的js文件(實現這個模塊或功能的文件)

  pluginId:插件的ID,通過這個ID可以進行插件的安裝和卸載

  clobbers:H5或js通過它去調用js中間件(插件)中定義的方法

 

二、在代碼中如何調用攝像頭插件

  上面我們說的都是在執行了cordova plugin add cordova-plugin-camera,安裝好插件之后所產生的內容以及插件的一些基本信息,配置信息。接下來我們說一下如何簡單使用這個插件。

  首先我們修改index.html(指的assets/www下的)

<!DOCTYPE html>
<html>
    <head>
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <link rel="stylesheet" type="text/css" href="css/index.css">
        <title>Hello World</title>
    </head>
    <body>
        <div class="app">
            <!-- 這里添加一個button去調用自己寫的拍照函數 -->
            <button onClick="takePhoto()">拍照</button>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
    </body>
</html>

  接下來再修改index.js

//自己定義的拍照函數
function takePhoto() { //拍照
    //navigator.camera就是上面我們所說的clobbers定義的東西,用來調用插件中的方法的
    //getPicture就是插件中調用攝像頭拍照的方法
 navigator.camera.getPicture(takeSuccess, takeFail, { destinationType : Camera.DestinationType.FILE_URI }); //拍照成功后回調
    function takeSuccess(imageURI) { console.log('success' + imageURI); } //失敗后回調
    function takeFail(message) { navigator.notification.alert("拍照失敗,原因:" + message); } }

  至此,我們的Cordova攝像頭插件已經在代碼中調用好了,運行我們的項目,就可以拍照了。(當然,模擬器上是不行的,得用真機)

 

三、getPicture()方法詳解:

  camera.getPicture(cameraSuccess, cameraError, cameraOptions)
  選擇使用攝像頭拍照,或從設備相冊中獲取一張照片。圖片以base64編碼的字符串或圖片URI形式返回。返回值會按照用戶通過cameraOptions參數所設定的下列格式之一發送給cameraSuccess回調函數:

  1.一個字符串,包含Base64編碼的照片圖像(默認情況)。
  2.一個字符串,表示在本地存儲的圖像文件位置。

 

  cameraSuccess:

  提供圖像數據的onSuccess回調函數。

function(imageData) { // 對圖像進行處理
}

  參數imageData:根據cameraOptions的設定值,為Base64編碼的圖像數據或圖像文件的URI。(字符串類型)

 

  errorCallback:

  提供錯誤信息的onError回調函數。

function(message) { // 顯示有用信息
}

  參數:message:設備本地代碼提供的錯誤信息。(字符串類型)

 

  cameraOptions:
  定制攝像頭設置的可選參數。

{ quality : 75, destinationType : Camera.DestinationType.DATA_URL, sourceType : Camera.PictureSourceType.CAMERA, allowEdit : true, encodingType : Camera.EncodingType.JPEG, targetWidth : 100, targetHeight : 100 };

  quality:存儲圖像的質量,范圍是[0,100]。(數字類型)
  destinationType:選擇返回數據的格式。通過navigator.camera.DestinationType進行定義。(數字類型)
  備注:強烈建議將“Camera.destinationType”設為FILE_URI。
  sourceType:設定圖片來源。通過nagivator.camera.PictureSourceType進行定義。(數字類型)
  allowEdit:在選擇圖片進行操作之前允許對其進行簡單編輯。(布爾類型)
  EncodingType:選擇返回圖像文件的編碼方式,通過navigator.camera.EncodingType進行定義。(數字類型)
  targetWidth:以像素為單位的圖像縮放寬度,必須和targetHeight同時使用。相應的寬高比保持不變。(數字類型)
  targetHeight:以像素為單位的圖像縮放高度,必須和targetWidth同時使用。相應的寬高比保持不變。(數字類型)
  MediaType:設置選擇圖片的類型,只有當PictureSourceType is PHOTOLIBRARY or SAVEDPHOTOALBUM時才會生效,該參數由nagivator.camera.MediaType (數字類型)定義。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM