diff --git a/README.md b/README.md
index 06f6e63..5615ee5 100644
--- a/README.md
+++ b/README.md
@@ -54,21 +54,21 @@ ZXingLite for Android 是ZXing的精简版,基于ZXing库优化扫码和生成
com.king.zxing
zxing-lite
- 1.1.4
+ 1.1.5
pom
```
### Gradle:
```gradle
//AndroidX 版本
-implementation 'com.king.zxing:zxing-lite:1.1.4-androidx'
+implementation 'com.king.zxing:zxing-lite:1.1.5-androidx'
//Android 版本
-implementation 'com.king.zxing:zxing-lite:1.1.4'
+implementation 'com.king.zxing:zxing-lite:1.1.5'
```
### Lvy:
```lvy
-
+
```
@@ -98,9 +98,9 @@ api 'com.google.zxing:core:3.3.3'
布局示例
> 可自定义布局(覆写getLayoutId方法),布局内至少要保证有SurfaceView和ViewfinderView,控件id可根据覆写CaptureActivity 的 getSurfaceViewId 和 getViewfinderViewId方法自定义
-> ivTorch为 v1.1.4版本新增的手电筒按钮,如果想改ID可通过CaptureActivity中的getIvTorchId自定义ID
+> ivTorch为 v1.1.5版本新增的手电筒按钮,如果想改ID可通过CaptureActivity中的getIvTorchId自定义ID
-> 如果是从v1.1.4以前版本升级至v1.1.4以上版本,请参考如下布局示例(新增ivTorch),也可忽略内置手电筒功能可直接将CaptureActivity中的getIvTorchId方法返回0
+> 如果是从v1.1.5以前版本升级至v1.1.5以上版本,请参考如下布局示例(新增ivTorch),也可忽略内置手电筒功能可直接将CaptureActivity中的getIvTorchId方法返回0
```Xml
+
+
diff --git a/app/release/app-release.apk b/app/release/app-release.apk
index c551c8f..254e74c 100644
Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ
diff --git a/app/release/output.json b/app/release/output.json
index a7d5c3a..4230fcc 100644
--- a/app/release/output.json
+++ b/app/release/output.json
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":16,"versionName":"1.1.4-androidx","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":18,"versionName":"1.1.5-androidx","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index de8b4bd..7cc0f0d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,8 @@
+
+
Jenly
*/
-public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,CaptureManager {
+public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,CaptureManager, SurfaceHolder.Callback {
public static final String TAG = CaptureHelper.class.getSimpleName();
@@ -65,7 +65,6 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
private ViewfinderView viewfinderView;
private SurfaceHolder surfaceHolder;
- private SurfaceHolder.Callback callback;
private View ivTorch;
private Collection decodeFormats;
@@ -145,6 +144,8 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
*/
private OnCaptureCallback onCaptureCallback;
+ private boolean hasCameraFlash;
+
/**
* use {@link #CaptureHelper(Fragment, SurfaceView, ViewfinderView, View)}
* @param fragment
@@ -193,49 +194,8 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
beepManager = new BeepManager(activity);
ambientLightManager = new AmbientLightManager(activity);
- cameraManager = new CameraManager(activity);
- cameraManager.setFullScreenScan(isFullScreenScan);
- cameraManager.setFramingRectRatio(framingRectRatio);
- cameraManager.setFramingRectVerticalOffset(framingRectVerticalOffset);
- cameraManager.setFramingRectHorizontalOffset(framingRectHorizontalOffset);
- if(ivTorch !=null && activity.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){
- ivTorch.setOnClickListener(v -> cameraManager.setTorch(!ivTorch.isSelected()));
- cameraManager.setOnSensorListener((torch, tooDark, ambientLightLux) -> {
- if(tooDark){
- if(ivTorch.getVisibility() != View.VISIBLE){
- ivTorch.setVisibility(View.VISIBLE);
- }
- }else if(!torch){
- if(ivTorch.getVisibility() == View.VISIBLE){
- ivTorch.setVisibility(View.INVISIBLE);
- }
- }
- });
- cameraManager.setOnTorchListener(torch -> ivTorch.setSelected(torch));
-
- }
- callback = new SurfaceHolder.Callback() {
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- if (holder == null) {
- Log.e(TAG, "*** WARNING *** surfaceCreated() gave us a null surface!");
- }
- if (!hasSurface) {
- hasSurface = true;
- initCamera(holder);
- }
- }
-
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
-
- }
-
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- hasSurface = false;
- }
- };
+ hasCameraFlash = activity.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
+ initCameraManager();
onCaptureListener = (result, barcode, scaleFactor) -> {
inactivityTimer.onActivity();
@@ -257,17 +217,15 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
@Override
public void onResume(){
beepManager.updatePrefs();
- ambientLightManager.start(cameraManager);
inactivityTimer.onResume();
- surfaceHolder.addCallback(callback);
-
if (hasSurface) {
initCamera(surfaceHolder);
} else {
- surfaceHolder.addCallback(callback);
+ surfaceHolder.addCallback(this);
}
+ ambientLightManager.start(cameraManager);
}
@@ -282,7 +240,7 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
beepManager.close();
cameraManager.closeDriver();
if (!hasSurface) {
- surfaceHolder.removeCallback(callback);
+ surfaceHolder.removeCallback(this);
}
}
@@ -327,6 +285,35 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
return false;
}
+ private void initCameraManager(){
+ cameraManager = new CameraManager(activity);
+ cameraManager.setFullScreenScan(isFullScreenScan);
+ cameraManager.setFramingRectRatio(framingRectRatio);
+ cameraManager.setFramingRectVerticalOffset(framingRectVerticalOffset);
+ cameraManager.setFramingRectHorizontalOffset(framingRectHorizontalOffset);
+ if(ivTorch !=null && hasCameraFlash){
+ ivTorch.setOnClickListener(v -> {
+ if(cameraManager!=null){
+ cameraManager.setTorch(!ivTorch.isSelected());
+ }
+ });
+ cameraManager.setOnSensorListener((torch, tooDark, ambientLightLux) -> {
+ if(tooDark){
+ if(ivTorch.getVisibility() != View.VISIBLE){
+ ivTorch.setVisibility(View.VISIBLE);
+ }
+ }else if(!torch){
+ if(ivTorch.getVisibility() == View.VISIBLE){
+ ivTorch.setVisibility(View.INVISIBLE);
+ }
+ }
+ });
+ cameraManager.setOnTorchListener(torch -> ivTorch.setSelected(torch));
+
+ }
+ }
+
+
/**
* 初始化Camera
* @param surfaceHolder
@@ -357,6 +344,27 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
}
}
+ @Override
+ public void surfaceCreated(SurfaceHolder holder) {
+ if (holder == null) {
+ Log.e(TAG, "*** WARNING *** surfaceCreated() gave us a null surface!");
+ }
+ if (!hasSurface) {
+ hasSurface = true;
+ initCamera(holder);
+ }
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
+
+ }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder holder) {
+ hasSurface = false;
+ }
+
/**
* 处理变焦缩放
* @param isZoomIn
@@ -485,7 +493,8 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
onResult(result);
}
- /**
+ /**';, mnb
+ *
* 接收扫码结果,想支持连扫时,可将{@link #continuousScan(boolean)}设置为{@code true}
* 如果{@link #isContinuousScan}支持连扫,则默认重启扫码和解码器;当连扫逻辑太复杂时,
* 请将{@link #autoRestartPreviewAndDecode(boolean)}设置为{@code false},并手动调用{@link #restartPreviewAndDecode()}
diff --git a/lib/src/main/java/com/king/zxing/InactivityTimer.java b/lib/src/main/java/com/king/zxing/InactivityTimer.java
index d06b262..891cad7 100644
--- a/lib/src/main/java/com/king/zxing/InactivityTimer.java
+++ b/lib/src/main/java/com/king/zxing/InactivityTimer.java
@@ -50,7 +50,7 @@ final class InactivityTimer {
onActivity();
}
- synchronized void onActivity() {
+ void onActivity() {
cancel();
inactivityTask = new InactivityAsyncTask(activity);
try {
@@ -60,7 +60,7 @@ final class InactivityTimer {
}
}
- synchronized void onPause() {
+ void onPause() {
cancel();
if (registered) {
activity.unregisterReceiver(powerStatusReceiver);
@@ -70,7 +70,7 @@ final class InactivityTimer {
}
}
- synchronized void onResume() {
+ void onResume() {
if (registered) {
Log.w(TAG, "PowerStatusReceiver was already registered?");
} else {
@@ -80,7 +80,7 @@ final class InactivityTimer {
onActivity();
}
- private synchronized void cancel() {
+ private void cancel() {
AsyncTask,?,?> task = inactivityTask;
if (task != null) {
task.cancel(true);
diff --git a/lib/src/main/java/com/king/zxing/camera/CameraManager.java b/lib/src/main/java/com/king/zxing/camera/CameraManager.java
index 46e85f6..8dc218e 100644
--- a/lib/src/main/java/com/king/zxing/camera/CameraManager.java
+++ b/lib/src/main/java/com/king/zxing/camera/CameraManager.java
@@ -90,7 +90,7 @@ public final class CameraManager {
* @param holder The surface object which the camera will draw preview frames into.
* @throws IOException Indicates the camera driver failed to open.
*/
- public synchronized void openDriver(SurfaceHolder holder) throws IOException {
+ public void openDriver(SurfaceHolder holder) throws IOException {
OpenCamera theCamera = camera;
if (theCamera == null) {
theCamera = OpenCameraInterface.open(requestedCameraId);
@@ -147,7 +147,7 @@ public final class CameraManager {
/**
* Closes the camera driver if still in use.
*/
- public synchronized void closeDriver() {
+ public void closeDriver() {
if (camera != null) {
camera.getCamera().release();
camera = null;
@@ -161,7 +161,7 @@ public final class CameraManager {
/**
* Asks the camera hardware to begin drawing preview frames to the screen.
*/
- public synchronized void startPreview() {
+ public void startPreview() {
OpenCamera theCamera = camera;
if (theCamera != null && !previewing) {
theCamera.getCamera().startPreview();
@@ -173,7 +173,7 @@ public final class CameraManager {
/**
* Tells the camera to stop drawing preview frames.
*/
- public synchronized void stopPreview() {
+ public void stopPreview() {
if (autoFocusManager != null) {
autoFocusManager.stop();
autoFocusManager = null;
diff --git a/versions.gradle b/versions.gradle
index 21aa7db..9b140f7 100644
--- a/versions.gradle
+++ b/versions.gradle
@@ -1,7 +1,7 @@
//App
def app_version = [:]
-app_version.versionCode = 16
-app_version.versionName = "1.1.4-androidx"
+app_version.versionCode = 18
+app_version.versionName = "1.1.5-androidx"
ext.app_version = app_version
//build version