| 使用zxing生成QRCode二維碼,在Android的webview中調(diào)用條形碼掃描zxing是一個條形碼和二維碼生成及識別的java開源組件,QRcode的中文名字是:QR快速響應(yīng)矩陣碼。
 1.下載zxing最新的包
 到zxing的主頁: http://code.google.com/p/zxing/
 下載 http://zxing./files/ZXing-1.6.zip
 http://zxing./files/BarcodeScanner3.52.apk 來源:http://code.google.com/p/zxing/downloads/list其中BarcodeScanner3.5.2.apk是安裝在Android操作系統(tǒng)的手機上的條碼掃描器安裝包。
 條碼掃描器的j2me版本下載地址為:
 http:///w/BarcodeReader.jad http:///w/BarcodeReader.jar 解壓為:D:\Java\zxing-1.6
 在dos窗口下進入到:D:\Java\zxing-1.6\core,然后運行ant命令進行編譯(必須先安裝配置了ant。
 ant最新版的下載地址為:http://ant./bindownload.cgi
 下載解壓后在系統(tǒng)的環(huán)境變量中配置ANT_HOME:例如:ANT_HOME=D:\Java\apache-ant-1.7.0;
 Path中必須有ant的bin目錄,例如:
 Path=D:\Java\jdk1.6.0_21\bin;D:\Java\apache-maven-2.0.9\bin;D:\Perl\site\bin;D:\
 Perl\bin;D:\Java\apache-ant-1.7.0\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\
 System32\Wbem;D:\Programs\svn-win32-1.5.4\bin;C:\Program Files\TortoiseSVN\bin;C
 :\Program Files\QuickTime\QTSystem\
 )
 編譯結(jié)果如下:
 D:\Java\zxing-1.6\core>ant
 Buildfile: build.xml
 clean: build: init: compile:[mkdir] Created dir: D:\Java\zxing-1.6\core\build
 [javac] Compiling 171 source files to D:\Java\zxing-1.6\core\build
 [jar] Building jar: D:\Java\zxing-1.6\core\core.jar
 BUILD SUCCESSFULTotal time: 6 seconds
 編譯之后得到core.jar這個包。再進入D:\Java\zxing-1.6\javase目錄使用ant進行編譯,編譯結(jié)果如下:
 D:\Java\zxing-1.6\javase>ant
 Buildfile: build.xml
 init: build:[mkdir] Created dir: D:\Java\zxing-1.6\javase\build
 [javac] Compiling 6 source files to D:\Java\zxing-1.6\javase\build
 [jar] Building jar: D:\Java\zxing-1.6\javase\javase.jar
 BUILD SUCCESSFULTotal time: 1 second
 編譯之后得到j(luò)avase.jar這個包。
 在Eclipse里新建Java工程:  編寫java代碼如下:package com.lizongbo.qrcode;
 import java.awt.image.BufferedImage;import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.Hashtable;
 import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;
 import com.google.zxing.MultiFormatWriter;
 import com.google.zxing.WriterException;
 import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
 public class QRCodeGen {private static final int BLACK = 0xFF000000;
 private static final int WHITE = 0xFFFFFFFF;
     /*** @param args
 * @throws WriterException
 * @throws IOException
 */
 public static void main(String[] args) throws WriterException, IOException {
 String picFormat = “png”;
 StringBuilder sb = new StringBuilder(1024);
 java.io.InputStreamReader fr = new InputStreamReader(
 new FileInputStream(“d:\\quickli.vcf”), “GBK”);
 BufferedReader br = new BufferedReader(fr);
 String line = null;
 while ((line = br.readLine()) != null) {
 sb.append(line).append(“\r\n”);
 }
 String str = sb.toString();// 二維碼內(nèi)容
 System.out.println(str.length() + “|str==” + str);
 str = new String(str.getBytes(“GBK”), “ISO-8859-1″);
 String path = “d:/lzb”;
 Hashtable hints = new Hashtable();
 // hints.put(EncodeHintType.CHARACTER_SET, “GBK”);
 BitMatrix bitMatrix = new MultiFormatWriter().encode(str,
 BarcodeFormat.QR_CODE, 400, 400, hints);
 /**
 * begin 這段代碼等同于就是 MatrixToImageWriter.writeToFile(bitMatrix, picFormat,
 * file);
 * 直接這樣寫就不用引用javase.jar
 */
 int width = bitMatrix.getWidth();
 int height = bitMatrix.getHeight();
 BufferedImage image = new BufferedImage(width, height,
 BufferedImage.TYPE_INT_ARGB);
 for (int x = 0; x < width; x++) {
 for (int y = 0; y < height; y++) {
 image.setRGB(x, y, bitMatrix.get(x, y) ? BLACK : WHITE);
 }
 }
 File file = new File(path + “.” + picFormat);
 ImageIO.write(image, picFormat, file);
 /**
 * end 這段代碼等同于就是 MatrixToImageWriter.writeToFile(bitMatrix, picFormat,
 * file);
 */
 MatrixToImageWriter.writeToFile(bitMatrix, picFormat, file);
 }
 }
 網(wǎng)址的QRcode生成如果不想編寫代碼,可以使用現(xiàn)成的google的api: http://chart.apis.google.com/chart?chs=150?150&cht=qr&chl=http://zxing./files/BarcodeScanner3.5.2.apk&chld=L|1&choe=UTF-8 Vcard也可以生成QRcode:參考:http://blog./archives/686
 在線對二維碼進行解碼的url: http:///w/decode.jspx
 在Webview中通過js也可以調(diào)用條形碼掃描,封裝的java代碼如下:
 	final class BarCodeUtilHandler {public void tryGetBarCode() {
 Intent intent = new Intent(“com.google.zxing.client.android.SCAN”);
 // intent.putExtra(“SCAN_MODE”, “QR_CODE_MODE”);
 startActivityForResult(intent, 0);
 }
 };
 	@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent intent) {
 Log.v(TAG, “onActivityResult===” + requestCode + “,” + resultCode + “,”
 + intent);
 if (requestCode == 0) {
 if (resultCode == RESULT_OK) {
 String contents = intent.getStringExtra(“SCAN_RESULT”);
 String format = intent.getStringExtra(“SCAN_RESULT_FORMAT”);
 webview.loadUrl(“javascript:showBarCode(\’” + format + “|”
 + contents + “\’)”);
 } else if (resultCode == RESULT_CANCELED) {
 webview.loadUrl(“javascript:showBarCode(\’沒有找到條碼!\’)”);
 }
 }
 }
 //webview.addJavascriptInterface(new BarCodeUtilHandler(), “barcodeutil”);//javascript調(diào)用:window.barcodeutil.tryGetBarCode();
 //function showBarCode(str) {
 //	try {
 //		document.getElementById(‘data’).value=str;
 //	} catch (ee) {
 //	}
 //}
 |