diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index cdafbc2..90eae86 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 99202cc..51fa3e5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -5,22 +5,32 @@
diff --git a/README.md b/README.md
index 8a15b0b..d3e41dc 100644
--- a/README.md
+++ b/README.md
@@ -124,7 +124,7 @@ api 'com.google.zxing:core:3.3.3'
> 4、参照CaptureHelper写一个自定义的扫码帮助类,其它步骤同方式3。(扩展高级用法,谨慎使用)
-更多使用详情,请查看[app](app)中的源码使用示例
+更多使用详情,请查看[app](app)中的源码使用示例或直接查看[API帮助文档](https://jenly1314.github.io/projects/ZXingLite/doc/)
## 版本记录
diff --git a/app/release/app-release.apk b/app/release/app-release.apk
index 12b36ab..bee8036 100644
Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ
diff --git a/app/src/main/java/com/king/zxing/app/CustomActivity.java b/app/src/main/java/com/king/zxing/app/CustomActivity.java
index 04be6ae..3c50672 100644
--- a/app/src/main/java/com/king/zxing/app/CustomActivity.java
+++ b/app/src/main/java/com/king/zxing/app/CustomActivity.java
@@ -13,6 +13,7 @@ import android.widget.TextView;
import android.widget.Toast;
import com.king.zxing.CaptureHelper;
+import com.king.zxing.DecodeFormatManager;
import com.king.zxing.OnCaptureCallback;
import com.king.zxing.ViewfinderView;
import com.king.zxing.app.util.StatusBarUtils;
diff --git a/app/src/main/java/com/king/zxing/app/CustomCaptureActivity.java b/app/src/main/java/com/king/zxing/app/CustomCaptureActivity.java
index d4992ee..5c11a94 100644
--- a/app/src/main/java/com/king/zxing/app/CustomCaptureActivity.java
+++ b/app/src/main/java/com/king/zxing/app/CustomCaptureActivity.java
@@ -15,16 +15,19 @@
*/
package com.king.zxing.app;
+import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
+import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
-import com.google.zxing.Result;
+import com.google.zxing.DecodeHintType;
import com.king.zxing.CaptureActivity;
import com.king.zxing.app.util.StatusBarUtils;
+import com.king.zxing.camera.CameraConfigurationUtils;
/**
* 自定义继承CaptureActivity
@@ -32,6 +35,8 @@ import com.king.zxing.app.util.StatusBarUtils;
*/
public class CustomCaptureActivity extends CaptureActivity {
+ private ImageView ivFlash;
+
private boolean isContinuousScan;
@Override
public int getLayoutId() {
@@ -40,39 +45,46 @@ public class CustomCaptureActivity extends CaptureActivity {
@Override
public void onCreate(Bundle icicle) {
+
super.onCreate(icicle);
Toolbar toolbar = findViewById(R.id.toolbar);
StatusBarUtils.immersiveStatusBar(this,toolbar,0.2f);
TextView tvTitle = findViewById(R.id.tvTitle);
tvTitle.setText(getIntent().getStringExtra(MainActivity.KEY_TITLE));
+ ivFlash = findViewById(R.id.ivFlash);
+
+ if(!hasTorch()){
+ ivFlash.setVisibility(View.GONE);
+ }
+
isContinuousScan = getIntent().getBooleanExtra(MainActivity.KEY_IS_CONTINUOUS,false);
//获取CaptureHelper,里面有扫码相关的配置设置
getCaptureHelper().playBeep(false)//播放音效
.vibrate(true)//震动
+// .decodeFormats(DecodeFormatManager.QR_CODE_FORMATS)//设置只识别二维码会提升速度
.supportVerticalCode(true)//支持扫垂直条码,建议有此需求时才使用。
.continuousScan(isContinuousScan);//是否连扫
+ }
+
+ /**
+ * 开启或关闭闪光灯(手电筒)
+ * @param on {@code true}表示开启,{@code false}表示关闭
+ */
+ public void setTorch(boolean on){
+ Camera camera = getCameraManager().getOpenCamera().getCamera();
+ Camera.Parameters parameters = camera.getParameters();
+ CameraConfigurationUtils.setTorch(parameters,on);
+ camera.setParameters(parameters);
}
/**
- * 关闭闪光灯(手电筒)
+ * 检测是否支持闪光灯(手电筒)
+ * @return
*/
- private void offFlash(){
- Camera camera = getCameraManager().getOpenCamera().getCamera();
- Camera.Parameters parameters = camera.getParameters();
- parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
- camera.setParameters(parameters);
- }
-
- /**
- * 开启闪光灯(手电筒)
- */
- public void openFlash(){
- Camera camera = getCameraManager().getOpenCamera().getCamera();
- Camera.Parameters parameters = camera.getParameters();
- parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
- camera.setParameters(parameters);
+ public boolean hasTorch(){
+ return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}
@@ -92,14 +104,9 @@ public class CustomCaptureActivity extends CaptureActivity {
private void clickFlash(View v){
- if(v.isSelected()){
- offFlash();
- v.setSelected(false);
- }else{
- openFlash();
- v.setSelected(true);
- }
-
+ boolean isSelected = v.isSelected();
+ setTorch(!isSelected);
+ v.setSelected(!isSelected);
}
public void onClick(View v){
diff --git a/app/src/main/java/com/king/zxing/app/EasyCaptureActivity.java b/app/src/main/java/com/king/zxing/app/EasyCaptureActivity.java
index d1701d1..4487a4c 100644
--- a/app/src/main/java/com/king/zxing/app/EasyCaptureActivity.java
+++ b/app/src/main/java/com/king/zxing/app/EasyCaptureActivity.java
@@ -21,6 +21,7 @@ import android.view.View;
import android.widget.TextView;
import com.king.zxing.CaptureActivity;
+import com.king.zxing.DecodeFormatManager;
import com.king.zxing.app.util.StatusBarUtils;
/**
@@ -41,7 +42,10 @@ public class EasyCaptureActivity extends CaptureActivity {
StatusBarUtils.immersiveStatusBar(this,toolbar,0.2f);
TextView tvTitle = findViewById(R.id.tvTitle);
tvTitle.setText(getIntent().getStringExtra(MainActivity.KEY_TITLE));
- getCaptureHelper().playBeep(true).vibrate(true);
+ getCaptureHelper()
+// .decodeFormats(DecodeFormatManager.QR_CODE_FORMATS)//设置只识别二维码会提升速度
+ .playBeep(true)
+ .vibrate(true);
}
public void onClick(View v){
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
deleted file mode 100644
index 792e528..0000000
--- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/build.gradle b/lib/build.gradle
index 2d21b3a..b2943d7 100644
--- a/lib/build.gradle
+++ b/lib/build.gradle
@@ -26,6 +26,11 @@ android {
}
}
+//task javadoc(type: Javadoc) {
+// source = android.sourceSets.main.java.srcDirs
+// classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
+//}
+
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
testImplementation deps.test.junit
diff --git a/lib/src/main/java/com/king/zxing/CaptureHandler.java b/lib/src/main/java/com/king/zxing/CaptureHandler.java
index 4b06ef3..dab16ad 100644
--- a/lib/src/main/java/com/king/zxing/CaptureHandler.java
+++ b/lib/src/main/java/com/king/zxing/CaptureHandler.java
@@ -58,7 +58,7 @@ public class CaptureHandler extends Handler implements ResultPointCallback {
CaptureHandler(Activity activity,ViewfinderView viewfinderView,OnCaptureListener onCaptureListener,
Collection decodeFormats,
- Map baseHints,
+ Map baseHints,
String characterSet,
CameraManager cameraManager) {
this.activity = activity;
diff --git a/lib/src/main/java/com/king/zxing/CaptureHelper.java b/lib/src/main/java/com/king/zxing/CaptureHelper.java
index 3aeb53a..36af639 100644
--- a/lib/src/main/java/com/king/zxing/CaptureHelper.java
+++ b/lib/src/main/java/com/king/zxing/CaptureHelper.java
@@ -21,7 +21,6 @@ import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.RectF;
import android.hardware.Camera;
-import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.MotionEvent;
@@ -36,6 +35,7 @@ import com.king.zxing.camera.CameraManager;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.EnumMap;
import java.util.List;
import java.util.Map;
@@ -63,7 +63,7 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
private SurfaceHolder.Callback callback;
private Collection decodeFormats;
- private Map decodeHints;
+ private Map decodeHints;
private String characterSet;
private boolean hasSurface;
@@ -376,10 +376,10 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
}
/**
- *
+ * 根据范围限定值
* @param x
- * @param min
- * @param max
+ * @param min 范围最小值
+ * @param max 范围最大值
* @return
*/
private int clamp(int x, int min, int max) {
@@ -504,7 +504,7 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
/**
* 设置支持的解码一/二维码格式,默认常规的码都支持
- * @param decodeFormats
+ * @param decodeFormats 可参见{@link DecodeFormatManager}
* @return
*/
public CaptureHelper decodeFormats(Collection decodeFormats) {
@@ -517,11 +517,25 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
* @param decodeHints
* @return
*/
- public CaptureHelper decodeHints(Map decodeHints) {
+ public CaptureHelper decodeHints(Map decodeHints) {
this.decodeHints = decodeHints;
return this;
}
+ /**
+ * {@link DecodeHintType}
+ * @param key {@link DecodeHintType}
+ * @param value {@link }
+ * @return
+ */
+ public CaptureHelper decodeHint(DecodeHintType key,Object value){
+ if(decodeHints == null){
+ decodeHints = new EnumMap<>(DecodeHintType.class);
+ }
+ decodeHints.put(key,value);
+ return this;
+ }
+
/**
* 设置解码时编码字符集
* @param characterSet
@@ -596,21 +610,37 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
return this;
}
+ /**
+ * {@link CameraManager}
+ * @return {@link #cameraManager}
+ */
@Override
public CameraManager getCameraManager() {
return cameraManager;
}
+ /**
+ * {@link BeepManager}
+ * @return {@link #beepManager}
+ */
@Override
public BeepManager getBeepManager() {
return beepManager;
}
+ /**
+ * {@link AmbientLightManager}
+ * @return {@link #ambientLightManager}
+ */
@Override
public AmbientLightManager getAmbientLightManager() {
return ambientLightManager;
}
+ /**
+ * {@link InactivityTimer}
+ * @return {@link #inactivityTimer}
+ */
@Override
public InactivityTimer getInactivityTimer() {
return inactivityTimer;
diff --git a/lib/src/main/java/com/king/zxing/DecodeHandler.java b/lib/src/main/java/com/king/zxing/DecodeHandler.java
index a7fc20e..fbe5341 100644
--- a/lib/src/main/java/com/king/zxing/DecodeHandler.java
+++ b/lib/src/main/java/com/king/zxing/DecodeHandler.java
@@ -33,9 +33,12 @@ import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.MultiFormatReader;
+import com.google.zxing.NotFoundException;
import com.google.zxing.PlanarYUVLuminanceSource;
+import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.ResultPoint;
+import com.google.zxing.common.GlobalHistogramBinarizer;
import com.google.zxing.common.HybridBinarizer;
import com.king.zxing.camera.CameraManager;
@@ -103,17 +106,22 @@ final class DecodeHandler extends Handler {
try {
rawResult = multiFormatReader.decodeWithState(bitmap);
} catch (Exception e) {
- if(isSupportVerticalCode){
- source = buildPlanarYUVLuminanceSource(data,width,height,!isScreenPortrait);
- if(source!=null){
- BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
- try{
- rawResult = multiFormatReader.decodeWithState(bitmap1);
- }catch (Exception e1){
+ BinaryBitmap bitmap1 = new BinaryBitmap(new GlobalHistogramBinarizer(source));
+ try{
+ rawResult = multiFormatReader.decodeWithState(bitmap1);
+ }catch (Exception e1){
+ if(isSupportVerticalCode){
+ source = buildPlanarYUVLuminanceSource(data,width,height,!isScreenPortrait);
+ if(source!=null){
+ BinaryBitmap bitmap2 = new BinaryBitmap(new HybridBinarizer(source));
+ try{
+ rawResult = multiFormatReader.decodeWithState(bitmap2);
+ }catch (Exception e2){
+ }
}
- }
+ }
}
} finally {
diff --git a/lib/src/main/java/com/king/zxing/DecodeThread.java b/lib/src/main/java/com/king/zxing/DecodeThread.java
index 65eb6e9..2f2d4a9 100644
--- a/lib/src/main/java/com/king/zxing/DecodeThread.java
+++ b/lib/src/main/java/com/king/zxing/DecodeThread.java
@@ -55,7 +55,7 @@ final class DecodeThread extends Thread {
DecodeThread(Context context,CameraManager cameraManager,
CaptureHandler captureHandler,
Collection decodeFormats,
- Map baseHints,
+ Map baseHints,
String characterSet,
ResultPointCallback resultPointCallback) {
diff --git a/lib/src/main/java/com/king/zxing/camera/CameraConfigurationManager.java b/lib/src/main/java/com/king/zxing/camera/CameraConfigurationManager.java
index 61b1576..207a6f8 100644
--- a/lib/src/main/java/com/king/zxing/camera/CameraConfigurationManager.java
+++ b/lib/src/main/java/com/king/zxing/camera/CameraConfigurationManager.java
@@ -161,8 +161,6 @@ final class CameraConfigurationManager {
parameters.setZoom(parameters.getMaxZoom() / 10);
}
- theCamera.setParameters(parameters);
-
initializeTorch(parameters, prefs, safeMode);
CameraConfigurationUtils.setFocus(
diff --git a/lib/src/main/java/com/king/zxing/util/CodeUtils.java b/lib/src/main/java/com/king/zxing/util/CodeUtils.java
index 98907d1..0f36898 100644
--- a/lib/src/main/java/com/king/zxing/util/CodeUtils.java
+++ b/lib/src/main/java/com/king/zxing/util/CodeUtils.java
@@ -198,7 +198,8 @@ public class CodeUtils {
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
try {
result = reader.decode(bitmap,hints);
- } catch (Exception e) {//解析失败则通过GlobalHistogramBinarizer 再试一次
+ } catch (Exception e) {
+ //解析失败则通过GlobalHistogramBinarizer 再试一次
BinaryBitmap bitmap1 = new BinaryBitmap(new GlobalHistogramBinarizer(source));
try {
result = reader.decode(bitmap1);
@@ -232,6 +233,7 @@ public class CodeUtils {
decodeFormats.addAll(DecodeFormatManager.AZTEC_FORMATS);
decodeFormats.addAll(DecodeFormatManager.PDF417_FORMATS);
+ hints.put(DecodeHintType.TRY_HARDER,Boolean.TRUE);
hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats);
return parseCode(bitmapPath,hints);
}
@@ -257,7 +259,7 @@ public class CodeUtils {
BinaryBitmap bitmap1 = new BinaryBitmap(new GlobalHistogramBinarizer(source));
try {
result = reader.decodeWithState(bitmap1);
- } catch (NotFoundException ne) {
+ } catch (Exception ne) {
}
} finally {
diff --git a/versions.gradle b/versions.gradle
index 6fd6860..91d55fc 100644
--- a/versions.gradle
+++ b/versions.gradle
@@ -29,7 +29,7 @@ versions.espresso = "3.0.2"
//zxing
versions.zxing = "3.3.3"
-versions.easypermissions = "1.3.0"
+versions.easypermissions = "2.0.1"