From 81485b4c54b0652f86d41bfe1ea10547c97e5950 Mon Sep 17 00:00:00 2001 From: hupei Date: Thu, 25 Aug 2016 18:47:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=8F=E8=82=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- preview/zxingscanner-1.2.1.jar | Bin 0 -> 73302 bytes zxingscanner/build.gradle | 13 +-- .../com/mylhyl/zxing/scanner/ScannerView.java | 14 ++- .../zxing/scanner/ScannerViewHandler.java | 13 +-- .../mylhyl/zxing/scanner/ViewfinderView.java | 17 ++- .../camera/CameraConfigurationManager.java | 63 ++++------- .../zxing/scanner/camera/FrontLightMode.java | 28 ----- .../mylhyl/zxing/scanner/common/Contents.java | 54 --------- .../mylhyl/zxing/scanner/common/Scanner.java | 6 +- .../scanner/decode/DecodeFormatManager.java | 107 ------------------ .../zxing/scanner/decode/DecodeHandler.java | 3 +- .../zxing/scanner/decode/DecodeThread.java | 45 +++++--- .../mylhyl/zxing/scanner/decode/QRDecode.java | 10 +- .../scanner/encode/ParserUriToVCard.java | 34 ++++-- .../zxing/scanner/encode/QRCodeEncoder.java | 11 +- 15 files changed, 118 insertions(+), 300 deletions(-) create mode 100644 preview/zxingscanner-1.2.1.jar delete mode 100644 zxingscanner/src/main/java/com/mylhyl/zxing/scanner/camera/FrontLightMode.java delete mode 100644 zxingscanner/src/main/java/com/mylhyl/zxing/scanner/common/Contents.java delete mode 100644 zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeFormatManager.java diff --git a/preview/zxingscanner-1.2.1.jar b/preview/zxingscanner-1.2.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..434ba2b2fb5da8afd8ee71014da1f35ade06651f GIT binary patch literal 73302 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�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 K6ks0=^nU 0) diff --git a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/camera/CameraConfigurationManager.java b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/camera/CameraConfigurationManager.java index 2fff974..cc9be78 100644 --- a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/camera/CameraConfigurationManager.java +++ b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/camera/CameraConfigurationManager.java @@ -19,6 +19,7 @@ import android.content.Context; import android.graphics.Point; import android.hardware.Camera; +import android.util.Log; import android.view.Display; import android.view.Surface; import android.view.WindowManager; @@ -34,8 +35,9 @@ */ final class CameraConfigurationManager { -// private static final String TAG = "CameraConfiguration"; - + private static final String TAG = "CameraConfiguration"; + private static final int FRONT_LIGHT_MODE_ON = 0; + private static final int FRONT_LIGHT_MODE_OFF = 1; private final Context context; private int cwNeededRotation; private int cwRotationFromDisplayToCamera; @@ -82,52 +84,29 @@ void initFromCameraParameters(OpenCamera camera) { + displayRotation); } } -// Log.i(TAG, "Display at: " + cwRotationFromNaturalToDisplay); int cwRotationFromNaturalToCamera = camera.getOrientation(); -// Log.i(TAG, "Camera at: " + cwRotationFromNaturalToCamera); - // Still not 100% sure about this. But acts like we need to flip this: if (camera.getFacing() == CameraFacing.FRONT) { cwRotationFromNaturalToCamera = (360 - cwRotationFromNaturalToCamera) % 360; -// Log.i(TAG, "Front camera overriden to: " + cwRotationFromNaturalToCamera); } - /* - * SharedPreferences prefs = - * PreferenceManager.getDefaultSharedPreferences(context); String - * overrideRotationString; if (camera.getFacing() == CameraFacing.FRONT) - * { overrideRotationString = - * prefs.getString(PreferencesActivity.KEY_FORCE_CAMERA_ORIENTATION_FRONT - * , null); } else { overrideRotationString = - * prefs.getString(PreferencesActivity.KEY_FORCE_CAMERA_ORIENTATION, - * null); } if (overrideRotationString != null && - * !"-".equals(overrideRotationString)) { Log.i(TAG, - * "Overriding camera manually to " + overrideRotationString); - * cwRotationFromNaturalToCamera = - * Integer.parseInt(overrideRotationString); } - */ - - cwRotationFromDisplayToCamera = (360 + cwRotationFromNaturalToCamera - cwRotationFromNaturalToDisplay) % 360; -// Log.i(TAG, "Final display orientation: " + cwRotationFromDisplayToCamera); + cwRotationFromDisplayToCamera = (360 + + cwRotationFromNaturalToCamera - cwRotationFromNaturalToDisplay) % 360; + if (camera.getFacing() == CameraFacing.FRONT) { -// Log.i(TAG, "Compensating rotation for front camera"); cwNeededRotation = (360 - cwRotationFromDisplayToCamera) % 360; } else { cwNeededRotation = cwRotationFromDisplayToCamera; } -// Log.i(TAG, "Clockwise rotation from display to camera: " + cwNeededRotation); Point theScreenResolution = new Point(); display.getSize(theScreenResolution); screenResolution = theScreenResolution; -// Log.i(TAG, "Screen resolution in current orientation: " + screenResolution); cameraResolution = CameraConfigurationUtils.findBestPreviewSizeValue( parameters, screenResolution); -// Log.i(TAG, "Camera resolution: " + cameraResolution); bestPreviewSize = CameraConfigurationUtils.findBestPreviewSizeValue( parameters, screenResolution); -// Log.i(TAG, "Best available preview size: " + bestPreviewSize); boolean isScreenPortrait = screenResolution.x < screenResolution.y; boolean isPreviewSizePortrait = bestPreviewSize.x < bestPreviewSize.y; @@ -135,10 +114,8 @@ void initFromCameraParameters(OpenCamera camera) { if (isScreenPortrait == isPreviewSizePortrait) { previewSizeOnScreen = bestPreviewSize; } else { - previewSizeOnScreen = new Point(bestPreviewSize.y, - bestPreviewSize.x); + previewSizeOnScreen = new Point(bestPreviewSize.y, bestPreviewSize.x); } -// Log.i(TAG, "Preview size on screen: " + previewSizeOnScreen); } /** @@ -153,18 +130,16 @@ void setDesiredCameraParameters(OpenCamera camera, boolean safeMode) { Camera.Parameters parameters = theCamera.getParameters(); if (parameters == null) { -// Log.w(TAG, "Device error: no camera parameters are available. Proceeding without configuration."); + Log.w(TAG, "Device error: no camera parameters are available. Proceeding without configuration."); return; } -// Log.i(TAG, "Initial camera parameters: " + parameters.flatten()); - -// if (safeMode) { -// Log.w(TAG, "In camera config safe mode -- most settings will not be honored"); -// } + if (safeMode) { + Log.w(TAG, "In camera config safe mode -- most settings will not be honored"); + } // 默认关闪光灯 - initializeTorch(parameters, FrontLightMode.OFF, safeMode); + initializeTorch(parameters, FRONT_LIGHT_MODE_OFF, safeMode); // 自动对焦 boolean autoFocus = true; // 持续对焦 @@ -202,9 +177,8 @@ void setDesiredCameraParameters(OpenCamera camera, boolean safeMode) { Camera.Parameters afterParameters = theCamera.getParameters(); Camera.Size afterSize = afterParameters.getPreviewSize(); if (afterSize != null - && (bestPreviewSize.x != afterSize.width || bestPreviewSize.y != afterSize.height)) { -// Log.w(TAG, "Camera said it supported preview size " + bestPreviewSize.x + 'x' + bestPreviewSize.y -// + ", but after setting it, preview size is " + afterSize.width + 'x' + afterSize.height); + && (bestPreviewSize.x != afterSize.width + || bestPreviewSize.y != afterSize.height)) { bestPreviewSize.x = afterSize.width; bestPreviewSize.y = afterSize.height; } @@ -236,7 +210,8 @@ boolean getTorchState(Camera camera) { if (parameters != null) { String flashMode = camera.getParameters().getFlashMode(); return flashMode != null - && (Camera.Parameters.FLASH_MODE_ON.equals(flashMode) || Camera.Parameters.FLASH_MODE_TORCH + && (Camera.Parameters.FLASH_MODE_ON.equals(flashMode) + || Camera.Parameters.FLASH_MODE_TORCH .equals(flashMode)); } } @@ -250,8 +225,8 @@ void setTorch(Camera camera, boolean newSetting) { } private void initializeTorch(Camera.Parameters parameters, - FrontLightMode frontLightMode, boolean safeMode) { - boolean currentSetting = frontLightMode == FrontLightMode.ON; + int frontLightMode, boolean safeMode) { + boolean currentSetting = frontLightMode == FRONT_LIGHT_MODE_ON; doSetTorch(parameters, currentSetting, safeMode); } diff --git a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/camera/FrontLightMode.java b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/camera/FrontLightMode.java deleted file mode 100644 index a04f10f..0000000 --- a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/camera/FrontLightMode.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2012 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.mylhyl.zxing.scanner.camera; - - -/** - * Enumerates settings of the preference controlling the front light. - */ -public enum FrontLightMode { - /** Always on. */ - ON, - /** Always off. */ - OFF -} diff --git a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/common/Contents.java b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/common/Contents.java deleted file mode 100644 index 8f868f7..0000000 --- a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/common/Contents.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.mylhyl.zxing.scanner.common; - -import android.provider.ContactsContract; - -/** - * The set of constants to use when sending Barcode Scanner an Intent which requests a barcode - * to be encoded. - * - * @author dswitkin@google.com (Daniel Switkin) - */ -public final class Contents { - private Contents() { - } - - public static final String URL_KEY = "URL_KEY"; - public static final String NOTE_KEY = "NOTE_KEY"; - /** - * When using Type.CONTACT, these arrays provide the keys for adding or retrieving multiple - * phone numbers and addresses. - */ - public static final String[] PHONE_KEYS = { - ContactsContract.Intents.Insert.PHONE, - ContactsContract.Intents.Insert.SECONDARY_PHONE, - ContactsContract.Intents.Insert.TERTIARY_PHONE - }; - - public static final String[] PHONE_TYPE_KEYS = { - ContactsContract.Intents.Insert.PHONE_TYPE, - ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE, - ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE - }; - - public static final String[] EMAIL_KEYS = { - ContactsContract.Intents.Insert.EMAIL, - ContactsContract.Intents.Insert.SECONDARY_EMAIL, - ContactsContract.Intents.Insert.TERTIARY_EMAIL - }; -} diff --git a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/common/Scanner.java b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/common/Scanner.java index ff55f13..71efc8c 100644 --- a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/common/Scanner.java +++ b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/common/Scanner.java @@ -33,10 +33,12 @@ public static ParsedResult parseResult(Result rawResult) { } public static int dp2px(Context context, float dpValue) { - return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, context.getResources().getDisplayMetrics()); + return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue + , context.getResources().getDisplayMetrics()); } public static int sp2px(Context context, float spValue) { - return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spValue, context.getResources().getDisplayMetrics()); + return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spValue + , context.getResources().getDisplayMetrics()); } } diff --git a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeFormatManager.java b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeFormatManager.java deleted file mode 100644 index 3df20be..0000000 --- a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeFormatManager.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2010 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.mylhyl.zxing.scanner.decode; - -import android.content.Intent; -import android.net.Uri; - -import com.google.zxing.BarcodeFormat; -import com.mylhyl.zxing.scanner.common.Intents; - -import java.util.Arrays; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.regex.Pattern; - -final class DecodeFormatManager { - - private static final Pattern COMMA_PATTERN = Pattern.compile(","); - - static final Set PRODUCT_FORMATS; - static final Set INDUSTRIAL_FORMATS; - private static final Set ONE_D_FORMATS; - static final Set QR_CODE_FORMATS = EnumSet.of(BarcodeFormat.QR_CODE); - static final Set DATA_MATRIX_FORMATS = EnumSet.of(BarcodeFormat.DATA_MATRIX); - static final Set AZTEC_FORMATS = EnumSet.of(BarcodeFormat.AZTEC); - static final Set PDF417_FORMATS = EnumSet.of(BarcodeFormat.PDF_417); - static { - PRODUCT_FORMATS = EnumSet.of(BarcodeFormat.UPC_A, - BarcodeFormat.UPC_E, - BarcodeFormat.EAN_13, - BarcodeFormat.EAN_8, - BarcodeFormat.RSS_14, - BarcodeFormat.RSS_EXPANDED); - INDUSTRIAL_FORMATS = EnumSet.of(BarcodeFormat.CODE_39, - BarcodeFormat.CODE_93, - BarcodeFormat.CODE_128, - BarcodeFormat.ITF, - BarcodeFormat.CODABAR); - ONE_D_FORMATS = EnumSet.copyOf(PRODUCT_FORMATS); - ONE_D_FORMATS.addAll(INDUSTRIAL_FORMATS); - } - private static final Map> FORMATS_FOR_MODE; - static { - FORMATS_FOR_MODE = new HashMap<>(); - FORMATS_FOR_MODE.put(Intents.Scan.ONE_D_MODE, ONE_D_FORMATS); - FORMATS_FOR_MODE.put(Intents.Scan.PRODUCT_MODE, PRODUCT_FORMATS); - FORMATS_FOR_MODE.put(Intents.Scan.QR_CODE_MODE, QR_CODE_FORMATS); - FORMATS_FOR_MODE.put(Intents.Scan.DATA_MATRIX_MODE, DATA_MATRIX_FORMATS); - FORMATS_FOR_MODE.put(Intents.Scan.AZTEC_MODE, AZTEC_FORMATS); - FORMATS_FOR_MODE.put(Intents.Scan.PDF417_MODE, PDF417_FORMATS); - } - - private DecodeFormatManager() {} - -/* static Set parseDecodeFormats(Intent intent) { - Iterable scanFormats = null; - CharSequence scanFormatsString = intent.getStringExtra(Intents.Scan.FORMATS); - if (scanFormatsString != null) { - scanFormats = Arrays.asList(COMMA_PATTERN.split(scanFormatsString)); - } - return parseDecodeFormats(scanFormats, intent.getStringExtra(Intents.Scan.MODE)); - }*/ - -/* static Set parseDecodeFormats(Uri inputUri) { - List formats = inputUri.getQueryParameters(Intents.Scan.FORMATS); - if (formats != null && formats.size() == 1 && formats.get(0) != null) { - formats = Arrays.asList(COMMA_PATTERN.split(formats.get(0))); - } - return parseDecodeFormats(formats, inputUri.getQueryParameter(Intents.Scan.MODE)); - }*/ - -/* private static Set parseDecodeFormats(Iterable scanFormats, String decodeMode) { - if (scanFormats != null) { - Set formats = EnumSet.noneOf(BarcodeFormat.class); - try { - for (String format : scanFormats) { - formats.add(BarcodeFormat.valueOf(format)); - } - return formats; - } catch (IllegalArgumentException iae) { - // ignore it then - } - } - if (decodeMode != null) { - return FORMATS_FOR_MODE.get(decodeMode); - } - return null; - }*/ - -} diff --git a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeHandler.java b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeHandler.java index 7a04d72..33ee6db 100644 --- a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeHandler.java +++ b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeHandler.java @@ -106,8 +106,7 @@ private void decode(byte[] data, int width, int height) { if (rawResult != null) { if (handler != null) { //会向 ScannerViewHandler 发消息 - Message message = Message.obtain(handler, - Scanner.DECODE_SUCCEEDED, rawResult); + Message message = Message.obtain(handler, Scanner.DECODE_SUCCEEDED, rawResult); Bundle bundle = new Bundle(); bundleThumbnail(source, bundle); message.setData(bundle); diff --git a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeThread.java b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeThread.java index 626f7be..45cc68e 100644 --- a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeThread.java +++ b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/DecodeThread.java @@ -29,6 +29,7 @@ import java.util.EnumMap; import java.util.EnumSet; import java.util.Map; +import java.util.Set; import java.util.concurrent.CountDownLatch; /** @@ -47,10 +48,30 @@ public final class DecodeThread extends Thread { private Handler handler; private final CountDownLatch handlerInitLatch; + static final Set PRODUCT_FORMATS; + static final Set INDUSTRIAL_FORMATS; + + static final Set QR_CODE_FORMATS = EnumSet.of(BarcodeFormat.QR_CODE); + static final Set DATA_MATRIX_FORMATS = EnumSet.of(BarcodeFormat.DATA_MATRIX); + + static { + PRODUCT_FORMATS = EnumSet.of(BarcodeFormat.UPC_A, + BarcodeFormat.UPC_E, + BarcodeFormat.EAN_13, + BarcodeFormat.EAN_8, + BarcodeFormat.RSS_14, + BarcodeFormat.RSS_EXPANDED); + INDUSTRIAL_FORMATS = EnumSet.of(BarcodeFormat.CODE_39, + BarcodeFormat.CODE_93, + BarcodeFormat.CODE_128, + BarcodeFormat.ITF, + BarcodeFormat.CODABAR); + } + public DecodeThread(CameraManager cameraManager, Handler scannerViewHandler, - Collection decodeFormats, - Map baseHints, String characterSet, - ResultPointCallback resultPointCallback) { + Collection decodeFormats, + Map baseHints, String characterSet, + ResultPointCallback resultPointCallback) { this.cameraManager = cameraManager; this.scannerViewHandler = scannerViewHandler; handlerInitLatch = new CountDownLatch(1); @@ -68,32 +89,22 @@ public DecodeThread(CameraManager cameraManager, Handler scannerViewHandler, // 一维码:商品 boolean decode1DProduct = true; if (decode1DProduct) { - decodeFormats.addAll(DecodeFormatManager.PRODUCT_FORMATS); + decodeFormats.addAll(PRODUCT_FORMATS); } // 一维码:工业 boolean decode1DIndustrial = true; if (decode1DIndustrial) { - decodeFormats.addAll(DecodeFormatManager.INDUSTRIAL_FORMATS); + decodeFormats.addAll(INDUSTRIAL_FORMATS); } // 二维码 boolean decodeQR = true; if (decodeQR) { - decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS); + decodeFormats.addAll(QR_CODE_FORMATS); } // Data Matrix boolean decodeDataMatrix = true; if (decodeDataMatrix) { - decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS); - } - // Aztec - boolean decodeAztec = false; - if (decodeAztec) { - decodeFormats.addAll(DecodeFormatManager.AZTEC_FORMATS); - } - // PDF417 (测试) - boolean decodePDF417 = false; - if (decodePDF417) { - decodeFormats.addAll(DecodeFormatManager.PDF417_FORMATS); + decodeFormats.addAll(DATA_MATRIX_FORMATS); } } hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats); diff --git a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/QRDecode.java b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/QRDecode.java index 856ab16..f575894 100644 --- a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/QRDecode.java +++ b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/decode/QRDecode.java @@ -69,8 +69,10 @@ public static void decodeQR(Bitmap srcBitmap, final OnScannerCompletionListener int height = srcBitmap.getHeight(); int[] pixels = new int[width * height]; srcBitmap.getPixels(pixels, 0, width, 0, 0, width, height); - RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);//新建一个RGBLuminanceSource对象 - BinaryBitmap binaryBitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source));//将图片转换成二进制图片 + //新建一个RGBLuminanceSource对象 + RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels); + //将图片转换成二进制图片 + BinaryBitmap binaryBitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source)); QRCodeReader reader = new QRCodeReader();//初始化解析对象 try { result = reader.decode(binaryBitmap, HINTS);//开始解析 @@ -82,9 +84,9 @@ public static void decodeQR(Bitmap srcBitmap, final OnScannerCompletionListener e.printStackTrace(); } } - if (listener != null) + if (listener != null) { listener.OnScannerCompletion(result, Scanner.parseResult(result), srcBitmap); - + } } private static Bitmap loadBitmap(String picturePath) throws FileNotFoundException { diff --git a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/encode/ParserUriToVCard.java b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/encode/ParserUriToVCard.java index 5cad472..5f45526 100644 --- a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/encode/ParserUriToVCard.java +++ b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/encode/ParserUriToVCard.java @@ -8,12 +8,32 @@ import android.provider.BaseColumns; import android.provider.ContactsContract; -import com.mylhyl.zxing.scanner.common.Contents; - /** * Created by hupei on 2016/8/25. */ public class ParserUriToVCard { + + public static final String URL_KEY = "URL_KEY"; + public static final String NOTE_KEY = "NOTE_KEY"; + + public static final String[] PHONE_KEYS = { + ContactsContract.Intents.Insert.PHONE, + ContactsContract.Intents.Insert.SECONDARY_PHONE, + ContactsContract.Intents.Insert.TERTIARY_PHONE + }; + + public static final String[] PHONE_TYPE_KEYS = { + ContactsContract.Intents.Insert.PHONE_TYPE, + ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE, + ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE + }; + + public static final String[] EMAIL_KEYS = { + ContactsContract.Intents.Insert.EMAIL, + ContactsContract.Intents.Insert.SECONDARY_EMAIL, + ContactsContract.Intents.Insert.TERTIARY_EMAIL + }; + public ParserUriToVCard() { } @@ -58,13 +78,13 @@ public Bundle parserUri(Context context, Uri contactUri) { int foundPhone = 0; int phonesNumberColumn = phonesCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); int phoneTypeColumn = phonesCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE); - while (phonesCursor.moveToNext() && foundPhone < Contents.PHONE_KEYS.length) { + while (phonesCursor.moveToNext() && foundPhone < PHONE_KEYS.length) { String number = phonesCursor.getString(phonesNumberColumn); if (number != null && !number.isEmpty()) { - bundle.putString(Contents.PHONE_KEYS[foundPhone], massageContactData(number)); + bundle.putString(PHONE_KEYS[foundPhone], massageContactData(number)); } int type = phonesCursor.getInt(phoneTypeColumn); - bundle.putInt(Contents.PHONE_TYPE_KEYS[foundPhone], type); + bundle.putInt(PHONE_TYPE_KEYS[foundPhone], type); foundPhone++; } } finally { @@ -101,10 +121,10 @@ public Bundle parserUri(Context context, Uri contactUri) { try { int foundEmail = 0; int emailColumn = emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA); - while (emailCursor.moveToNext() && foundEmail < Contents.EMAIL_KEYS.length) { + while (emailCursor.moveToNext() && foundEmail < EMAIL_KEYS.length) { String email = emailCursor.getString(emailColumn); if (email != null && !email.isEmpty()) { - bundle.putString(Contents.EMAIL_KEYS[foundEmail], massageContactData(email)); + bundle.putString(EMAIL_KEYS[foundEmail], massageContactData(email)); } foundEmail++; } diff --git a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/encode/QRCodeEncoder.java b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/encode/QRCodeEncoder.java index d39df03..2fd5c04 100644 --- a/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/encode/QRCodeEncoder.java +++ b/zxingscanner/src/main/java/com/mylhyl/zxing/scanner/encode/QRCodeEncoder.java @@ -27,7 +27,6 @@ import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; -import com.mylhyl.zxing.scanner.common.Contents; import java.util.ArrayList; import java.util.Collections; @@ -121,12 +120,12 @@ private void encodeQRCodeContents(QREncode.Builder build) { String organization = contactBundle .getString(ContactsContract.Intents.Insert.COMPANY); String address = contactBundle.getString(ContactsContract.Intents.Insert.POSTAL); - List phones = getAllBundleValues(contactBundle, Contents.PHONE_KEYS); - List phoneTypes = getAllBundleValues(contactBundle, Contents.PHONE_TYPE_KEYS); - List emails = getAllBundleValues(contactBundle, Contents.EMAIL_KEYS); - String url = contactBundle.getString(Contents.URL_KEY); + List phones = getAllBundleValues(contactBundle, ParserUriToVCard.PHONE_KEYS); + List phoneTypes = getAllBundleValues(contactBundle, ParserUriToVCard.PHONE_TYPE_KEYS); + List emails = getAllBundleValues(contactBundle, ParserUriToVCard.EMAIL_KEYS); + String url = contactBundle.getString(ParserUriToVCard.URL_KEY); List urls = url == null ? null : Collections.singletonList(url); - String note = contactBundle.getString(Contents.NOTE_KEY); + String note = contactBundle.getString(ParserUriToVCard.NOTE_KEY); ContactEncoder encoder = build.isUseVCard() ? new VCardContactEncoder() : new MECARDContactEncoder(); String[] encoded = encoder.encode(Collections.singletonList(name), organization,