diff --git a/README.md b/README.md index 8e60937..742789e 100644 --- a/README.md +++ b/README.md @@ -56,21 +56,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 - + ``` @@ -100,9 +100,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 + + 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(); @@ -64,7 +64,6 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture private ViewfinderView viewfinderView; private SurfaceHolder surfaceHolder; - private SurfaceHolder.Callback callback; private View ivTorch; private Collection decodeFormats; @@ -144,6 +143,8 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture */ private OnCaptureCallback onCaptureCallback; + private boolean hasCameraFlash; + /** * use {@link #CaptureHelper(Fragment, SurfaceView, ViewfinderView, View)} * @param fragment @@ -192,49 +193,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(); @@ -256,17 +216,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); } @@ -281,7 +239,7 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture beepManager.close(); cameraManager.closeDriver(); if (!hasSurface) { - surfaceHolder.removeCallback(callback); + surfaceHolder.removeCallback(this); } } @@ -326,6 +284,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 @@ -356,6 +343,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 diff --git a/lib/src/main/java/com/king/zxing/InactivityTimer.java b/lib/src/main/java/com/king/zxing/InactivityTimer.java index d06b262..3254095 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 e103576..8482616 100644 --- a/lib/src/main/java/com/king/zxing/camera/CameraManager.java +++ b/lib/src/main/java/com/king/zxing/camera/CameraManager.java @@ -89,7 +89,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); @@ -146,7 +146,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; @@ -160,7 +160,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(); @@ -172,7 +172,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 f571e4b..b0a87f7 100644 --- a/versions.gradle +++ b/versions.gradle @@ -1,7 +1,7 @@ //App def app_version = [:] -app_version.versionCode = 15 //androidx 16 -app_version.versionName = "1.1.4" +app_version.versionCode = 17 //androidx 18 +app_version.versionName = "1.1.5" ext.app_version = app_version //build version