phonegap的二维码扫描功能的实现

来源:互联网 发布:钣金编程软件 编辑:程序博客网 时间:2024/04/29 21:20

前言:

1、我使用的phonegap版本是2.9.1,不太了解phonegap3.0以后的版本,不过可以保证的是phonegap2.0.0之后的按照下面的方法来实现二维码是没有问题的。

2、phonegap的插件都是放在github上托管的,到https://github.com/phonegap/phonegap-plugin-barcodescanner地址下载 BarcodeScanner


我是在 http://download.csdn.NET/detail/cs627565157/7882155 URL下载的免费BarcodeScanner




1、创建Android项目

将项目配置成phonegap项目,引入cordova.js、cordova.jar包,再添加xml\config.xml文件




2、导入BarcodeScanner-master\src\android\LibraryProject,并将LibraryProject 作为新创建项目的library





3、将BarcodeScanner.java文件移动到Android工程中





4、配置res/xml/config.xml文件,添加以下内容:

   <feature name="BarcodeScanner" >        <param            name="android-package"            value="com.phonegap.plugins.barcodescanner.BarcodeScanner" />    </feature>

5、配置AndroidManifest.xml

在application中添加以下activity

<!-- ZXing activities -->      <activity android:name="com.google.zxing.client.android.CaptureActivity"            android:screenOrientation="landscape"            android:clearTaskOnLaunch="true"            android:configChanges="orientation|keyboardHidden"            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"            android:windowSoftInputMode="stateAlwaysHidden"            android:exported="false">    <intent-filter>      <action android:name="com.phonegap.plugins.barcodescanner.SCAN"/>      <category android:name="android.intent.category.DEFAULT"/>    </intent-filter>  </activity>  <activity android:name="com.google.zxing.client.android.encode.EncodeActivity" android:label="@string/share_name">    <intent-filter>      <action android:name="com.phonegap.plugins.barcodescanner.ENCODE"/>      <category android:name="android.intent.category.DEFAULT"/>    </intent-filter>  </activity>  <activity android:name="com.google.zxing.client.android.HelpActivity" android:label="@string/share_name">      <intent-filter>              <action android:name="android.intent.action.VIEW"/>          <category android:name="android.intent.category.DEFAULT"/>      </intent-filter>  </activity>
添加以下权限:

<uses-permission android:name="android.permission.CAMERA" />    <uses-permission android:name="android.permission.VIBRATE" />    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.RECEIVE_SMS" />    <uses-permission android:name="android.permission.RECORD_AUDIO" />    <uses-permission android:name="android.permission.RECORD_VIDEO" />    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />    <uses-permission android:name="android.permission.READ_CONTACTS" />    <uses-permission android:name="android.permission.WRITE_CONTACTS" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.GET_ACCOUNTS" />    <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <!-- 扫描二维码 -->    <uses-permission android:name="android.permission.CAMERA" />    <uses-permission android:name="android.permission.FLASHLIGHT" />    <uses-feature        android:name="android.hardware.camera"        android:required="false" />

6、配置barcodescanner.js



实际上下载下来的这个barcodescanner.js是用不了的,我把我的这个JS文件贴到这里,可以复制之后然后自己新建一个barcodescanner.js。

/**  * cordova is available under *either* the terms of the modified BSD license *or* the  * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.  *  * Copyright (c) Matt Kane 2010  * Copyright (c) 2011, IBM Corporation  */    cordova.define("cordova/plugins/barcodescanner",     function(require, exports, module) {      var exec = require("cordova/exec");      var BarcodeScanner = function() {};            //-------------------------------------------------------------------      BarcodeScanner.prototype.scan = function(successCallback, errorCallback) {          if (errorCallback == null) { errorCallback = function() {}}                if (typeof errorCallback != "function")  {              console.log("BarcodeScanner.scan failure: failure parameter not a function");              return          }                if (typeof successCallback != "function") {              console.log("BarcodeScanner.scan failure: success callback parameter must be a function");              return          }                exec(successCallback, errorCallback, 'BarcodeScanner', 'scan', []);      };            //-------------------------------------------------------------------      BarcodeScanner.prototype.encode = function(type, data, successCallback, errorCallback, options) {          if (errorCallback == null) { errorCallback = function() {}}                if (typeof errorCallback != "function")  {              console.log("BarcodeScanner.scan failure: failure parameter not a function");              return          }                if (typeof successCallback != "function") {              console.log("BarcodeScanner.scan failure: success callback parameter must be a function");              return          }                exec(successCallback, errorCallback, 'BarcodeScanner', 'encode', [{"type": type, "data": data, "options": options}]);      };            var barcodeScanner = new BarcodeScanner();      module.exports = barcodeScanner;    });    cordova.define("cordova/plugin/BarcodeConstants",       function(require, exports, module) {      module.exports = {          Encode:{              TEXT_TYPE: "TEXT_TYPE",              EMAIL_TYPE: "EMAIL_TYPE",              PHONE_TYPE: "PHONE_TYPE",              SMS_TYPE: "SMS_TYPE",          }      };          });  //-------------------------------------------------------------------  var BarcodeScanner = cordova.require('cordova/plugin/BarcodeConstants');    if(!window.plugins) {      window.plugins = {};  }  if (!window.plugins.barcodeScanner) {      window.plugins.barcodeScanner = cordova.require("cordova/plugins/barcodescanner");  } 


7、创建barcode.html

<html>  <head>  <meta charset="UTF-8"><script src="cordova.js" type="text/javascript"></script>  <script src="barcodescanner.js" type="text/javascript"></script>  <script type="text/javascript">  var scanCode = function() {      window.plugins.barcodeScanner.scan(          function(result) {          alert("Scanned Code: " + result.text                   + ". Format: " + result.format                  + ". Cancelled: " + result.cancelled);      }, function(error) {          alert("Scan failed: " + error);      });  }   var encodeText = function() {        window.plugins.barcodeScanner.encode(              BarcodeScanner.Encode.TEXT_TYPE,              "http://www.mobiledevelopersolutions.com",              function(success) {                  alert("Encode success: " + success);              }, function(fail) {                  alert("Encoding failed: " + fail);              });  }  var encodeEmail = function() {        window.plugins.barcodeScanner.encode(          BarcodeScanner.Encode.EMAIL_TYPE,          "a.name@gmail.com", function(success) {              alert("Encode success: " + success);          }, function(fail) {              alert("Encoding failed: " + fail);          });  }  var encodePhone = function() {        window.plugins.barcodeScanner.encode(          BarcodeScanner.Encode.PHONE_TYPE,          "555-227-5283", function(success) {              alert("Encode success: " + success);          }, function(fail) {              alert("Encoding failed: " + fail);          });  }  var encodeSMS = function() {        window.plugins.barcodeScanner.encode(          BarcodeScanner.Encode.SMS_TYPE,          "An important message for someone.", function(success) {              alert("Encode success: " + success);          }, function(fail) {              alert("Encoding failed: " + fail);          });  }  </script>  </head>  <body>  hello 二维码!  <input type="button" onclick="scanCode()" value="扫描"/>  <input type="button" onclick="encodeText()" value="转换文本"/>  <input type="button" onclick="encodeEmail()" value="转换邮箱地址"/>  <input type="button" onclick="encodePhone()" value="转换手机号"/>  <input type="button" onclick="encodeSMS()" value="转换短信"/>  </body>  </html>  

8、运行APP






参考的文章: http://blog.csdn.net/u014646984/article/details/25655725



0 0
原创粉丝点击