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