From 5eb7511ed9f82f8323cdfde30807cd6c2091c5a7 Mon Sep 17 00:00:00 2001 From: Jenly Date: Wed, 23 Dec 2020 19:03:44 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84v2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 + app/build.gradle | 12 +- app/src/main/AndroidManifest.xml | 7 + .../com/king/zxing/app/CustomActivity.java | 58 +- .../king/zxing/app/CustomCaptureActivity.java | 29 +- .../king/zxing/app/EasyCaptureActivity.java | 13 +- .../java/com/king/zxing/app/MainActivity.java | 14 +- .../com/king/zxing/app/QRCodeActivity.java | 49 + app/src/main/res/layout/activity_main.xml | 13 + app/src/main/res/layout/custom_activity.xml | 4 +- .../res/layout/custom_capture_activity.xml | 6 +- app/src/main/res/layout/qr_code_activity.xml | 36 + build.gradle | 6 +- gradle/wrapper/gradle-wrapper.properties | 2 +- lib/build.gradle | 4 + lib/src/main/AndroidManifest.xml | 1 + .../com/king/zxing/AmbientLightManager.java | 120 ++- .../main/java/com/king/zxing/BeepManager.java | 74 +- .../java/com/king/zxing/CameraConfig.java | 32 + .../main/java/com/king/zxing/CameraScan.java | 189 ++++ .../java/com/king/zxing/CaptureActivity.java | 122 ++- .../java/com/king/zxing/CaptureFragment.java | 160 ++-- .../java/com/king/zxing/CaptureHandler.java | 199 ---- .../java/com/king/zxing/CaptureHelper.java | 849 ------------------ .../java/com/king/zxing/CaptureLifecycle.java | 45 - .../java/com/king/zxing/CaptureManager.java | 48 - .../com/king/zxing/CaptureTouchEvent.java | 29 - .../java/com/king/zxing/DecodeConfig.java | 284 ++++++ .../com/king/zxing/DecodeFormatManager.java | 300 ++++--- .../java/com/king/zxing/DecodeHandler.java | 250 ------ .../java/com/king/zxing/DecodeThread.java | 121 --- .../com/king/zxing/DefaultCameraScan.java | 404 +++++++++ .../main/java/com/king/zxing/ICameraScan.java | 69 ++ .../java/com/king/zxing/InactivityTimer.java | 144 --- lib/src/main/java/com/king/zxing/Intents.java | 303 ------- .../com/king/zxing/OnCaptureCallback.java | 17 - .../com/king/zxing/OnCaptureListener.java | 22 - .../main/java/com/king/zxing/Preferences.java | 50 -- .../java/com/king/zxing/ViewfinderView.java | 14 +- .../java/com/king/zxing/analyze/Analyzer.java | 17 + .../king/zxing/analyze/AreaRectAnalyzer.java | 57 ++ .../zxing/analyze/BarcodeFormatAnalyzer.java | 96 ++ .../com/king/zxing/analyze/ImageAnalyzer.java | 41 + .../zxing/analyze/MultiFormatAnalyzer.java | 98 ++ .../king/zxing/analyze/QRCodeAnalyzer.java | 35 + .../king/zxing/camera/AutoFocusManager.java | 140 --- .../camera/CameraConfigurationManager.java | 236 ----- .../camera/CameraConfigurationUtils.java | 408 --------- .../com/king/zxing/camera/CameraManager.java | 440 --------- .../com/king/zxing/camera/FrontLightMode.java | 50 -- .../king/zxing/camera/PreviewCallback.java | 59 -- .../king/zxing/camera/open/CameraFacing.java | 22 - .../king/zxing/camera/open/OpenCamera.java | 57 -- .../camera/open/OpenCameraInterface.java | 88 -- .../java/com/king/zxing/util/CodeUtils.java | 169 +--- lib/src/main/res/layout/zxl_capture.xml | 6 +- lib/src/main/res/values-v19/styles.xml | 13 - lib/src/main/res/values-v21/styles.xml | 15 - lib/src/main/res/values/attrs.xml | 4 + lib/src/main/res/values/styles.xml | 5 + versions.gradle | 23 +- 61 files changed, 2032 insertions(+), 4150 deletions(-) create mode 100644 app/src/main/java/com/king/zxing/app/QRCodeActivity.java create mode 100644 app/src/main/res/layout/qr_code_activity.xml create mode 100644 lib/src/main/java/com/king/zxing/CameraConfig.java create mode 100644 lib/src/main/java/com/king/zxing/CameraScan.java delete mode 100644 lib/src/main/java/com/king/zxing/CaptureHandler.java delete mode 100644 lib/src/main/java/com/king/zxing/CaptureHelper.java delete mode 100644 lib/src/main/java/com/king/zxing/CaptureLifecycle.java delete mode 100644 lib/src/main/java/com/king/zxing/CaptureManager.java delete mode 100644 lib/src/main/java/com/king/zxing/CaptureTouchEvent.java create mode 100644 lib/src/main/java/com/king/zxing/DecodeConfig.java delete mode 100644 lib/src/main/java/com/king/zxing/DecodeHandler.java delete mode 100644 lib/src/main/java/com/king/zxing/DecodeThread.java create mode 100644 lib/src/main/java/com/king/zxing/DefaultCameraScan.java create mode 100644 lib/src/main/java/com/king/zxing/ICameraScan.java delete mode 100644 lib/src/main/java/com/king/zxing/InactivityTimer.java delete mode 100644 lib/src/main/java/com/king/zxing/Intents.java delete mode 100644 lib/src/main/java/com/king/zxing/OnCaptureCallback.java delete mode 100644 lib/src/main/java/com/king/zxing/OnCaptureListener.java delete mode 100644 lib/src/main/java/com/king/zxing/Preferences.java create mode 100644 lib/src/main/java/com/king/zxing/analyze/Analyzer.java create mode 100644 lib/src/main/java/com/king/zxing/analyze/AreaRectAnalyzer.java create mode 100644 lib/src/main/java/com/king/zxing/analyze/BarcodeFormatAnalyzer.java create mode 100644 lib/src/main/java/com/king/zxing/analyze/ImageAnalyzer.java create mode 100644 lib/src/main/java/com/king/zxing/analyze/MultiFormatAnalyzer.java create mode 100644 lib/src/main/java/com/king/zxing/analyze/QRCodeAnalyzer.java delete mode 100644 lib/src/main/java/com/king/zxing/camera/AutoFocusManager.java delete mode 100644 lib/src/main/java/com/king/zxing/camera/CameraConfigurationManager.java delete mode 100644 lib/src/main/java/com/king/zxing/camera/CameraConfigurationUtils.java delete mode 100644 lib/src/main/java/com/king/zxing/camera/CameraManager.java delete mode 100644 lib/src/main/java/com/king/zxing/camera/FrontLightMode.java delete mode 100644 lib/src/main/java/com/king/zxing/camera/PreviewCallback.java delete mode 100644 lib/src/main/java/com/king/zxing/camera/open/CameraFacing.java delete mode 100644 lib/src/main/java/com/king/zxing/camera/open/OpenCamera.java delete mode 100644 lib/src/main/java/com/king/zxing/camera/open/OpenCameraInterface.java delete mode 100644 lib/src/main/res/values-v19/styles.xml delete mode 100644 lib/src/main/res/values-v21/styles.xml diff --git a/README.md b/README.md index 7cfc830..0c837c5 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,10 @@ ZXingLite for Android 是ZXing的精简版,基于ZXing库优化扫码和生成 | frameLineWidth | dimension | 1dp | 边框线宽度 | | scannerAnimationDelay | integer | 20 | 扫描动画延迟间隔时间,单位:毫秒 | | frameRatio | float | 0.625f | 扫码框与屏幕占比 | +| framePaddingLeft | dimension | 0 | 扫码框左边的内间距 | +| framePaddingTop | dimension | 0 | 扫码框上边的内间距 | +| framePaddingRight | dimension | 0 | 扫码框右边的内间距 | +| framePaddingBottom | dimension | 0 | 扫码框下边的内间距 | ## 引入 diff --git a/app/build.gradle b/app/build.gradle index e68691a..822d281 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,6 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' android { compileSdkVersion build_versions.compileSdk @@ -22,10 +24,15 @@ android { abortOnError false } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + + kotlinOptions { + jvmTarget = '1.8' + } } dependencies { @@ -33,11 +40,14 @@ dependencies { testImplementation deps.test.junit androidTestImplementation deps.test.runner androidTestImplementation deps.test.espresso - //support + implementation deps.support.design implementation deps.support.appcompat implementation deps.support.constraintlayout + implementation deps.kotlin + implementation deps.corektx + implementation deps.easypermissions implementation project(':lib') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7cc0f0d..51d4581 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,16 @@ android:screenOrientation="portrait" android:theme="@style/CaptureTheme"/> + + + + \ No newline at end of file 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 3cd2059..99754be 100644 --- a/app/src/main/java/com/king/zxing/app/CustomActivity.java +++ b/app/src/main/java/com/king/zxing/app/CustomActivity.java @@ -9,31 +9,33 @@ import android.widget.TextView; import android.widget.Toast; import com.google.zxing.Result; -import com.king.zxing.CaptureHelper; -import com.king.zxing.OnCaptureCallback; +import com.king.zxing.CameraScan; +import com.king.zxing.DefaultCameraScan; +import com.king.zxing.ICameraScan; import com.king.zxing.ViewfinderView; import com.king.zxing.app.util.StatusBarUtils; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; +import androidx.camera.view.PreviewView; import androidx.fragment.app.Fragment; /** * 自定义扫码:当直接使用CaptureActivity - * 自定义扫码,切记自定义扫码需在{@link Activity}或者{@link Fragment}相对应的生命周期里面调用{@link #mCaptureHelper}对应的生命周期 + * 自定义扫码,切记自定义扫码需在{@link Activity}或者{@link Fragment}相对应的生命周期里面调用{@link #mCameraScan}对应的生命周期 * @author Jenly */ -public class CustomActivity extends AppCompatActivity implements OnCaptureCallback { +public class CustomActivity extends AppCompatActivity implements CameraScan.OnScanResultCallback { private boolean isContinuousScan; - private CaptureHelper mCaptureHelper; + private CameraScan mCameraScan; - private SurfaceView surfaceView; + private PreviewView previewView; private ViewfinderView viewfinderView; - private View ivTorch; + private View ivFlash; private Toast toast; @@ -53,60 +55,38 @@ public class CustomActivity extends AppCompatActivity implements OnCaptureCallba tvTitle.setText(getIntent().getStringExtra(MainActivity.KEY_TITLE)); - surfaceView = findViewById(R.id.surfaceView); + previewView = findViewById(R.id.previewView); viewfinderView = findViewById(R.id.viewfinderView); - ivTorch = findViewById(R.id.ivFlash); - ivTorch.setVisibility(View.INVISIBLE); + ivFlash = findViewById(R.id.ivFlash); + ivFlash.setVisibility(View.INVISIBLE); isContinuousScan = getIntent().getBooleanExtra(MainActivity.KEY_IS_CONTINUOUS,false); - mCaptureHelper = new CaptureHelper(this,surfaceView,viewfinderView,ivTorch); - mCaptureHelper.setOnCaptureCallback(this); - mCaptureHelper.onCreate(); - mCaptureHelper.vibrate(true) - .fullScreenScan(true)//全屏扫码 - .supportVerticalCode(true)//支持扫垂直条码,建议有此需求时才使用。 - .supportLuminanceInvert(true)//是否支持识别反色码(黑白反色的码),增加识别率 - .continuousScan(isContinuousScan); + mCameraScan = new DefaultCameraScan(this,previewView); + mCameraScan.setOnScanResultCallback(this); - } + mCameraScan.startCamera(); - @Override - protected void onResume() { - super.onResume(); - mCaptureHelper.onResume(); - } - - @Override - protected void onPause() { - super.onPause(); - mCaptureHelper.onPause(); } @Override protected void onDestroy() { + mCameraScan.release(); super.onDestroy(); - mCaptureHelper.onDestroy(); } - @Override - public boolean onTouchEvent(MotionEvent event) { - mCaptureHelper.onTouchEvent(event); - return super.onTouchEvent(event); - } - - /** * 扫码结果回调 * @param result 扫码结果 * @return */ @Override - public boolean onResultCallback(Result result) { + public boolean onScanResultCallback(Result result) { if(isContinuousScan){ showToast(result.getText()); } - return false; + //如果需支持连扫,返回true即可 + return isContinuousScan; } private void showToast(String text){ 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 c606ee2..bb7a594 100644 --- a/app/src/main/java/com/king/zxing/app/CustomCaptureActivity.java +++ b/app/src/main/java/com/king/zxing/app/CustomCaptureActivity.java @@ -52,21 +52,16 @@ public class CustomCaptureActivity extends CaptureActivity { tvTitle.setText(getIntent().getStringExtra(MainActivity.KEY_TITLE)); isContinuousScan = getIntent().getBooleanExtra(MainActivity.KEY_IS_CONTINUOUS,false); - //获取CaptureHelper,里面有扫码相关的配置设置 - getCaptureHelper().playBeep(false)//播放音效 - .vibrate(true)//震动 - .fullScreenScan(true) - .supportVerticalCode(true)//支持扫垂直条码,建议有此需求时才使用。 -// .decodeFormats(DecodeFormatManager.QR_CODE_FORMATS)//设置只识别二维码会提升速度 -// .framingRectRatio(0.9f)//设置识别区域比例,范围建议在0.625 ~ 1.0之间。非全屏识别时才有效 -// .framingRectVerticalOffset(0)//设置识别区域垂直方向偏移量,非全屏识别时才有效 -// .framingRectHorizontalOffset(0)//设置识别区域水平方向偏移量,非全屏识别时才有效 - .tooDarkLux(45f)//设置光线太暗时,自动触发开启闪光灯的照度值 - .brightEnoughLux(100f)//设置光线足够明亮时,自动触发关闭闪光灯的照度值 - .continuousScan(isContinuousScan)//是否连扫 - .supportLuminanceInvert(true);//是否支持识别反色码(黑白反色的码),增加识别率 + } + @Override + public void initCameraScan() { + super.initCameraScan(); + //获取CaptureHelper,里面有扫码相关的配置设置 + getCameraScan().setPlayBeep(false)//播放音效 + .setVibrate(true);//震动 + } /** * 扫码结果回调 @@ -74,12 +69,12 @@ public class CustomCaptureActivity extends CaptureActivity { * @return */ @Override - public boolean onResultCallback(Result result) { - if(isContinuousScan){//连续扫码时,直接弹出结果 + public boolean onScanResultCallback(Result result) { + if(isContinuousScan){ showToast(result.getText()); } - - return super.onResultCallback(result); + //如果支持连扫,返回true即可 + return isContinuousScan; } private void showToast(String text){ 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 8efa631..ac546f2 100644 --- a/app/src/main/java/com/king/zxing/app/EasyCaptureActivity.java +++ b/app/src/main/java/com/king/zxing/app/EasyCaptureActivity.java @@ -42,10 +42,15 @@ 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() -// .decodeFormats(DecodeFormatManager.QR_CODE_FORMATS)//设置只识别二维码会提升速度 - .playBeep(true) - .vibrate(true); + + } + + @Override + public void initCameraScan() { + super.initCameraScan(); + getCameraScan() + .setPlayBeep(true) + .setVibrate(true); } public void onClick(View v){ diff --git a/app/src/main/java/com/king/zxing/app/MainActivity.java b/app/src/main/java/com/king/zxing/app/MainActivity.java index f6cb14c..91f2516 100644 --- a/app/src/main/java/com/king/zxing/app/MainActivity.java +++ b/app/src/main/java/com/king/zxing/app/MainActivity.java @@ -26,12 +26,12 @@ import android.view.View; import android.widget.Button; import android.widget.Toast; +import com.king.zxing.CameraScan; import com.king.zxing.CaptureActivity; -import com.king.zxing.Intents; import com.king.zxing.app.util.UriUtils; import com.king.zxing.util.CodeUtils; +import com.king.zxing.util.LogUtils; -import org.w3c.dom.Text; import java.util.List; @@ -78,6 +78,7 @@ public class MainActivity extends AppCompatActivity implements EasyPermissions.P protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + } @Override @@ -86,7 +87,7 @@ public class MainActivity extends AppCompatActivity implements EasyPermissions.P if(resultCode == RESULT_OK && data!=null){ switch (requestCode){ case REQUEST_CODE_SCAN: - String result = data.getStringExtra(Intents.Scan.RESULT); + String result = CameraScan.parseScanResult(data); showToast(result); break; case REQUEST_CODE_PHOTO: @@ -109,7 +110,7 @@ public class MainActivity extends AppCompatActivity implements EasyPermissions.P private void parsePhoto(Intent data){ final String path = UriUtils.getImagePath(this,data); - Log.d("Jenly","path:" + path); + LogUtils.d("path:" + path); if(TextUtils.isEmpty(path)){ return; } @@ -254,6 +255,11 @@ public class MainActivity extends AppCompatActivity implements EasyPermissions.P case R.id.btn7: checkExternalStoragePermissions(); break; + case R.id.btn8: + this.cls = QRCodeActivity.class; + this.title = ((Button)v).getText().toString(); + checkCameraPermissions(); + break; } } diff --git a/app/src/main/java/com/king/zxing/app/QRCodeActivity.java b/app/src/main/java/com/king/zxing/app/QRCodeActivity.java new file mode 100644 index 0000000..8ebd4c1 --- /dev/null +++ b/app/src/main/java/com/king/zxing/app/QRCodeActivity.java @@ -0,0 +1,49 @@ +package com.king.zxing.app; + +import android.os.Bundle; +import android.widget.TextView; + +import com.google.zxing.Result; +import com.king.zxing.CaptureActivity; +import com.king.zxing.DecodeFormatManager; +import com.king.zxing.analyze.MultiFormatAnalyzer; +import com.king.zxing.app.util.StatusBarUtils; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.Toolbar; + +/** + * @author Jenly + */ +public class QRCodeActivity extends CaptureActivity { + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + 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)); + } + + + @Override + public int getLayoutId() { + return R.layout.qr_code_activity; + } + + @Override + public void initCameraScan() { + super.initCameraScan(); + //在启动预览之前,设置分析器,只识别二维码,如果只有识别二维码的需求,这样效率更多高 + getCameraScan() + .setVibrate(true) + .setAnalyzer(new MultiFormatAnalyzer(DecodeFormatManager.QR_CODE_HINTS)); + } + + @Override + public boolean onScanResultCallback(Result result) { + return super.onScanResultCallback(result); + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a557909..e905d87 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -131,4 +131,17 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/btn6" style="@style/OnClick"/> +