真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何使用Android實(shí)現(xiàn)基于ZXing快速集成二維碼掃描功能

這篇文章給大家分享的是有關(guān)如何使用Android實(shí)現(xiàn)基于ZXing快速集成二維碼掃描功能的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、尼勒克ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的尼勒克網(wǎng)站制作公司

二維碼掃描現(xiàn)在是一直比較多的應(yīng)用場(chǎng)景,android的開(kāi)源項(xiàng)目ZXing提供了完整、成熟的解決方案,如果僅僅是出于快速開(kāi)發(fā)的目的,可以根據(jù)自己的項(xiàng)目需要,把ZXing官方提供的項(xiàng)目稍加裁剪,就可以快速的集成到自己的項(xiàng)目中。下面詳細(xì)演示和介紹如何實(shí)現(xiàn)基于ZXing官方提供的源碼,快速集成二維碼掃描功能到自己項(xiàng)目中的解決方案。 

(第1步):到ZXing官方主頁(yè)下載最新的項(xiàng)目代碼包,ZXing在github的官方主頁(yè):https://github.com/zxing,下載后解壓。解壓后根目錄下有若干項(xiàng)目目錄,其中的:android就是我們需要的項(xiàng)目,把它導(dǎo)入到Eclispse中。 

(第2步):ZXing的Android項(xiàng)目需要引用兩個(gè)關(guān)鍵的庫(kù)文件:android-core-x.x.x.jarcore-x.x.x.jar,其中x.x.x表示版本號(hào)。截止發(fā)表本博文時(shí)候,版本已經(jīng)是3.2.0了。這兩個(gè)關(guān)鍵的android-core-x.x.x.jar 和 core-x.x.x.jar 文件,實(shí)際上都可以從第一步下載得到的源代碼中自己編譯生成,網(wǎng)上也有編譯的具體方案,但簡(jiǎn)單期間,也可以從ZXing的官方直接下載已經(jīng)編譯好的文件,其中android-core的下載鏈接是:http://repo1.maven.org/maven2/com/google/zxing/android-core/,另外一個(gè)ZXing的core下載鏈接是:http://repo1.maven.org/maven2/com/google/zxing/core/ ,選擇最新版本的庫(kù)文件或者自己需要的版本號(hào),下載后,和其他android項(xiàng)目中導(dǎo)入庫(kù)文件類似,導(dǎo)入到Android項(xiàng)目中的libs目錄下,如果沒(méi)有l(wèi)ibs,新建一個(gè)名為libs的目錄,把兩個(gè)庫(kù)文件放進(jìn)去即可。 

(第3步):這一步作為演示,我們自己新建一個(gè)MainActiviy,作為項(xiàng)目的啟動(dòng)器Activity,App將啟動(dòng)我們自己的MainActivity。觀察ZXing官方提供的AndroidManifest.xml文件: 





 
 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 
 
 
 
 

 

 
 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 
 
 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 
 
  
  
  
  
 
 
  
  
  
  
 
 
 
 
 
 

其實(shí)ZXing官方的項(xiàng)目已經(jīng)作為為第三方提供集成的代碼了,比如其中的關(guān)鍵Activity:.\src\com\google\zxing\client\android\CaptureActivity.Java,在聲明中已經(jīng)提供好了從各種入口訪問(wèn)的Intent的Action。所以在我們自己新建的MainActivity中,直接隱式指定一個(gè)Intent的Action,啟動(dòng)之即可: 

package com.google.zxing.client.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {

 private final int REQUEST_CODE = 0xa1;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

 Intent intent = new Intent();
 //隱式指定
 intent.setAction("com.google.zxing.client.android.SCAN");
 
 //啟動(dòng)ZXing已經(jīng)寫好、且我們做小量修改后的CaptureActivity。
 startActivityForResult(intent, REQUEST_CODE);
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);

 //我們需要的結(jié)果返回
 if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {

 //result就是二維碼掃描的結(jié)果。
 String result = data.getStringExtra("RESULT");

 Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT)
  .show();
 }
 }
}

因?yàn)槲覀儐?dòng)ZXing的CaptureActivity不是目的,真正的目的是啟動(dòng)ZXing的CaptureActivity獲得二維碼掃描結(jié)果,因此以startActivityForResult()的方式啟動(dòng)。相應(yīng)的,我們需要重寫:protected void onActivityResult(int requestCode, int resultCode, Intent data),以回調(diào)等待傳回結(jié)果。

(第4步):這一步是重點(diǎn)。在.\src\com\google\zxing\client\android\目錄下的CaptureActivity.java中的方法: public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor);此方法是一個(gè)回調(diào)函數(shù)。ZXing項(xiàng)目中寫好的掃描模塊掃描后返回回調(diào)此方法,ZXing官方的原始 public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor)方法是這樣的: 

/**
 * A valid barcode has been found, so give an indication of success and show the results.
 *
 * @param rawResult The contents of the barcode.
 * @param scaleFactor amount by which thumbnail was scaled
 * @param barcode A greyscale bitmap of the camera data which was decoded.
 */
 public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor) {
 inactivityTimer.onActivity();
 lastResult = rawResult;
 ResultHandler resultHandler = ResultHandlerFactory.makeResultHandler(this, rawResult);

 boolean fromLiveScan = barcode != null;
 if (fromLiveScan) {
  historyManager.addHistoryItem(rawResult, resultHandler);
  // Then not from history, so beep/vibrate and we have an image to draw on
  beepManager.playBeepSoundAndVibrate();
  drawResultPoints(barcode, scaleFactor, rawResult);
 }

 switch (source) {
  case NATIVE_APP_INTENT:
  case PRODUCT_SEARCH_LINK:
  handleDecodeExternally(rawResult, resultHandler, barcode);
  break;
  case ZXING_LINK:
  if (scanFromWebPageManager == null || !scanFromWebPageManager.isScanFromWebPage()) {
   handleDecodeInternally(rawResult, resultHandler, barcode);
  } else {
   handleDecodeExternally(rawResult, resultHandler, barcode);
  }
  break;
  case NONE:
  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
  if (fromLiveScan && prefs.getBoolean(PreferencesActivity.KEY_BULK_MODE, false)) {
   Toast.makeText(getApplicationContext(),
       getResources().getString(R.string.msg_bulk_mode_scanned) + " (" + rawResult.getText() + ')',
       Toast.LENGTH_SHORT).show();
   // Wait a moment or else it will scan the same barcode continuously about 3 times
   restartPreviewAfterDelay(BULK_MODE_SCAN_DELAY_MS);
  } else {
   handleDecodeInternally(rawResult, resultHandler, barcode);
  }
  break;
 }
 }

 我們將精簡(jiǎn)此方法,定制自己所需要的內(nèi)容,為滿足我們自己項(xiàng)目中的需求,把此方法修改后的代碼為:

 public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor) {
 inactivityTimer.onActivity();
 lastResult = rawResult;
 ResultHandler resultHandler = ResultHandlerFactory.makeResultHandler(this, rawResult);

 boolean fromLiveScan = barcode != null;
 if (fromLiveScan) {
  historyManager.addHistoryItem(rawResult, resultHandler);
  // Then not from history, so beep/vibrate and we have an image to draw on
  beepManager.playBeepSoundAndVibrate();
  drawResultPoints(barcode, scaleFactor, rawResult);
 }
 
 
 //在這里增加我們的代碼,目的是:做最小量的修改,僅僅把ZXing提供的CaptureActivity作為一個(gè)中間使用的Activity集成到我們自己的項(xiàng)目。
 //啟動(dòng)實(shí)現(xiàn)二維碼掃描,返回一個(gè)結(jié)果就可以了。
 //然后結(jié)束這個(gè)Activity。
 Intent intent=new Intent();
 //形式存儲(chǔ)二維碼結(jié)果。
 //rawResult.getText()即為二維碼結(jié)果。
 intent.putExtra("RESULT", rawResult.getText());
 this.setResult(Activity.RESULT_OK, intent);
 this.finish();
 
 
 /**
 以下是ZXing提供的源碼,根據(jù)項(xiàng)目需要可以刪減使用。
 簡(jiǎn)單期間,我們只需要二維碼掃描后返回一個(gè)掃描的字符串結(jié)果。
 所以在次暫時(shí)注釋掉。
 
 switch (source) {
  case NATIVE_APP_INTENT:
  case PRODUCT_SEARCH_LINK:
  handleDecodeExternally(rawResult, resultHandler, barcode);
  break;
  case ZXING_LINK:
  if (scanFromWebPageManager == null || !scanFromWebPageManager.isScanFromWebPage()) {
   handleDecodeInternally(rawResult, resultHandler, barcode);
  } else {
   handleDecodeExternally(rawResult, resultHandler, barcode);
  }
  break;
  case NONE:
  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
  if (fromLiveScan && prefs.getBoolean(PreferencesActivity.KEY_BULK_MODE, false)) {
   Toast.makeText(getApplicationContext(),
       getResources().getString(R.string.msg_bulk_mode_scanned) + " (" + rawResult.getText() + ')',
       Toast.LENGTH_SHORT).show();
   // Wait a moment or else it will scan the same barcode continuously about 3 times
   restartPreviewAfterDelay(BULK_MODE_SCAN_DELAY_MS);
  } else {
   handleDecodeInternally(rawResult, resultHandler, barcode);
  }
  break;
 }
 
 **/
 }

 (第5步):這一步比較簡(jiǎn)單,是剩余的收尾工作,修改AndroidManifest.xml文件,把我們的MainActivity作為主Activity啟動(dòng)。把ZXing的CaptureActivity作為一個(gè)普通的Activity。 

修改后的AndroidManifest.xml文件:

 



 
 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 
 
 
 
 

 

 
  
  
 
 
   
    
    
   
 
  
  
 
  
   
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 
 
 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 
 
  
  
  
  
 
 
  
  
  
  
 
 
 
 
 
 

備注:此文僅僅是最簡(jiǎn)單的一個(gè)示例,演示了如何在自己的項(xiàng)目中在ZXing官方項(xiàng)目已提供的完整代碼基礎(chǔ)上,做最小量的改動(dòng),將二維碼掃描功能快速集成到自己的項(xiàng)目中為我所用,若需要更多的細(xì)節(jié)調(diào)整,則需要深入定制和改編源代碼。

感謝各位的閱讀!關(guān)于“如何使用Android實(shí)現(xiàn)基于ZXing快速集成二維碼掃描功能”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


網(wǎng)站題目:如何使用Android實(shí)現(xiàn)基于ZXing快速集成二維碼掃描功能
網(wǎng)站路徑:http://weahome.cn/article/ieshhs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部