MUI掃描功能的實現

        開發手機APP時經常需要用到掃描二維碼/條碼的功能,在使用MUI框架開發時,我們可以使用H5plus封裝好的Barcode類。Barcode模塊管理條碼掃描,提供常見的條碼(二維碼及一維碼)的掃描識別功能,可調用設備的攝像頭對條碼圖片掃描進行數據輸入。通過plus.barcode可獲取條碼碼管理對象。

具體可參照官方文檔:http://www.dcloud.io/docs/api/zh_cn/barcode.shtml

該類的主要方法:

1、通過圖片掃描條碼數據:

void plus.barcode.scan( path, successCB, errorCB,filters );

2、開始條碼識別:

void bc.start( options );

3、結束條碼識別:

void bc.cancel();

4、是否開啓閃光燈

void obj.setFlash( open );

5、條碼識別成功事件

void obj.onmarked = function ( type, code, file ) {

         //loaded code

}

下面我講述下我們項目中用到的情況及一些注意事項。

1、創建Barcode對象,須指定Barcode對象的在界面中關聯div或object標籤的id號;

2、Barcode會加載在Webview的最頂層,並且無法隱藏,只有關閉Webview時Barcode纔會自動關閉;

3、可通過filters參數設置需要支持條碼類型,設置類型越少越能提高掃描效率。

如果需要使用複雜的組合,可以將Webview作爲其它Webview的子窗口,子窗口中包含Barcode,當子窗口隱藏時Barcode也會隱藏。

 

         由於Barcode附屬於Webview上,並且只有在Webview關閉時才自動銷燬的特點,我在項目中使用一個Webview來加載Barcode,並將條碼掃描方法封裝成公共API供外部調用,

 

   Webview中定義以下事件:

                       

 //開始掃描事件

doc.addEventListener('startScan',function(event) {

         if(scan) {

                  startScan(event.detail.notClose);

         }

});

//停止掃描事件

doc.addEventListener('endScan',function() {

         if(scan) {

                   scan.cancel();

         }

});

VarflashOpen=false;

// 開啓閃光燈事件

doc.addEventListener('setFlash',function() {

         if(scan) {

                   flashOpen= !flashOpen;

                   scan.setFlash(flashOpen);

         }

});


         並定義以下方法:

function startScan(notClose) {

	_notClose = notClose;

	//若是需要將結果返回文件

	scan.start({

		conserve: true,

		filename: _filePath

	});

}



functioninitScan(view) {

	//var filter = [plus.barcode.CODE128, plus.barcode.EAN13];

	//var scan = new plus.barcode.Barcode('divReg');

	scan = new plus.barcode.Barcode(view /*, filter*/ );

	scan.onmarked = onmarked;

}



functiononmarked(type, result, file) {

	switch (type) {

		caseplus.barcode.QR:

			type = "QR";

		break;

		caseplus.barcode.EAN13:

			type = "EAN13";

		break;

		caseplus.barcode.EAN8:

			type = "EAN8";

		break;

		default:

		type = "其它";

		break;

	}

	varself = plus.webview.currentWebview();

	varopener = self.opener();

	scan.cancel();

	mui.fire(opener, 'endScan', {

		result: result,

		file: file

	});

	//繼續掃描,不關閉掃描窗口

	if (_notClose) {

		setTimeout(function() {

			startScan(true);

		}, 1000);

	} else {

		self.hide();

	}

}


         定義供外部調用的API:

function($, owner) {

	var_scanWindow = null;

	owner.InitScan = function(filePath) {

		_scanWindow = mui.preload({

			url: '/view/CommonHelper/ScanCanvas.html',

			id: 'scanCanvas',

			waiting: {

				autoShow: true,

				title: '正在加載...'

			},

			extras: {

				filePath: filePath

			}

		});

	};



	/**

	 * 開始掃描

	 * @param {Object} isContinue 是否連續掃描

	 */

	owner.BeginScan = function(isContinue) {

		mui.fire(_scanWindow, 'startScan', {

			notClose: isContinue

		});

		_scanWindow.show();

	};



	/**

	 *結束掃描

	 */

	owner.EndScan = function() {

		mui.fire(_scanWindow, 'endScan');

	}

}(mui, window.BarcodeUtil = {}));


 

         在其他頁面調用掃描時,只需要調用BarcodeUtil.InitScan()方法初始化(用於預加載Webview,改善直接openwindow帶來的加載等待操作,改善體驗),調用BarcodeUtil. BeginScan()方法開始掃描,調用BarcodeUtil.EndScan()方法結束掃描。

         調用頁面須定義掃描處理事件

 

//  自定義掃描結束事件

window.addEventListener('endScan',owner.EndScan);

         在該事件中處理掃描結果。

 

         掃描的方法就此完成了,其實只不過直接調用官方提供的API,使用的時候注意一些東西便是。H5 plus提供的接口還是很方便的。


發佈了24 篇原創文章 · 獲贊 11 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章