From 636c4bb04e4fcd723766b82732990cdb4ae4ea2e Mon Sep 17 00:00:00 2001
From: hxb <hxb@hdlchina.com.cn>
Date: 星期四, 22 二月 2024 15:48:23 +0800
Subject: [PATCH] 删除掉本地库
---
app/src/main/java/com/hdl/photovoltaic/ui/device/FastScanActivity.java | 419 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 415 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/device/FastScanActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/device/FastScanActivity.java
index 7c31db8..ba49e66 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/device/FastScanActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/device/FastScanActivity.java
@@ -1,17 +1,82 @@
package com.hdl.photovoltaic.ui.device;
-import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.content.res.AppCompatResources;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
+import android.graphics.Rect;
+import android.hardware.Camera;
+import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
+import android.provider.MediaStore;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+import android.view.View;
+import android.view.animation.Animation;
+import android.view.animation.TranslateAnimation;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.Toast;
+import com.google.zxing.BinaryBitmap;
+import com.google.zxing.ChecksumException;
+import com.google.zxing.DecodeHintType;
+import com.google.zxing.FormatException;
+import com.google.zxing.NotFoundException;
+import com.google.zxing.Result;
+import com.google.zxing.common.HybridBinarizer;
+import com.google.zxing.qrcode.QRCodeReader;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.base.CustomBaseActivity;
import com.hdl.photovoltaic.databinding.ActivityFastScanBinding;
+import com.zxing.IZxingActivity;
+import com.zxing.camera.CameraManager;
+import com.zxing.decode.DecodeThread;
+import com.zxing.decode.RGBLuminanceSource;
+import com.zxing.utils.BeepManager;
+import com.zxing.utils.CaptureActivityHandler;
+import com.zxing.utils.InactivityTimer;
-public class FastScanActivity extends CustomBaseActivity {
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.Hashtable;
-
+public class FastScanActivity extends CustomBaseActivity implements IZxingActivity, SurfaceHolder.Callback {
+ private static final String TAG = "FastScanActivity";
+ private final int REQUEST_CODE = 33;
+ private CameraManager cameraManager;
+ private CaptureActivityHandler handler;
+ private InactivityTimer inactivityTimer;
+ private BeepManager beepManager;
+ private SurfaceView scanPreview = null;
+ private RelativeLayout scanContainer;
+ private RelativeLayout scanCropView;
+ private Rect mCropRect = null;
+ private boolean isHasSurface = false;
private ActivityFastScanBinding viewBinding;
+
+ @Override
+ public Handler getHandler() {
+ return handler;
+ }
+
+ @Override
+ public void drawViewfinder() {
+
+ }
+
+ @Override
+ public CameraManager getCameraManager() {
+ return cameraManager;
+ }
@Override
public Object getContentView() {
@@ -21,6 +86,352 @@
@Override
public void onBindView(Bundle savedInstanceState) {
+// Window window = getWindow();
+// window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+// //璁剧疆鏍硅鍥�
+// View mContentView = LayoutInflater.from(this).inflate(R.layout.activity_new_capture, null);
+// setContentView(mContentView);
+ //鍒濆鍖�
+ initView(savedInstanceState);
+ //鍒濆鍖栫晫闈㈢洃鍚櫒
+ initEvent();
+ }
+
+
+ private void initView(Bundle savedInstanceState) {
+
+
+ scanPreview = findViewById(R.id.new_capture_preview);
+ scanContainer = findViewById(R.id.new_capture_rl);
+ scanCropView = findViewById(R.id.new_capture_crop_view);
+ ImageView scanLine = findViewById(R.id.new_capture_scan_line);
+ inactivityTimer = new InactivityTimer(this);
+ beepManager = new BeepManager(this);
+
+ TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, Animation
+ .RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT,
+ 0.9f);
+ animation.setDuration(2000);
+ animation.setRepeatCount(-1);
+ animation.setRepeatMode(Animation.RESTART);
+ scanLine.startAnimation(animation);
+ }
+
+ private void initEvent() {
+ viewBinding.newTopBackBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ viewBinding.newTopMoreBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //璺冲埌鍏ョ綉
+ }
+ });
+
+ viewBinding.newLightIv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ v.setSelected(!v.isSelected());
+ if (v.isSelected()) {
+ viewBinding.newLightIv.setImageDrawable(AppCompatResources.getDrawable(FastScanActivity.this, com.zxing.R.drawable.fast_scan_light_open));
+ } else {
+ viewBinding.newLightIv.setImageDrawable(AppCompatResources.getDrawable(FastScanActivity.this, com.zxing.R.drawable.fast_scan_light_close));
+ }
+ flashLightOnOrOff();
+
+ }
+ });
+ }
+
+
+ public void enterGallery() {
+ // 杩涘叆鍥惧簱
+ Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setType("image/*");
+ intent.putExtra("return-data", true);
+ startActivityForResult(intent, REQUEST_CODE);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ cameraManager = new CameraManager(getApplication());
+ handler = null;
+ if (isHasSurface) {
+ initCamera(scanPreview.getHolder());
+ } else {
+ scanPreview.getHolder().addCallback(this);
+ }
+
+ inactivityTimer.onResume();
+ }
+
+ @Override
+ protected void onPause() {
+ if (handler != null) {
+ handler.quitSynchronously();
+ handler = null;
+ }
+ inactivityTimer.onPause();
+ beepManager.close();
+ cameraManager.closeDriver();
+ if (!isHasSurface) {
+ scanPreview.getHolder().removeCallback(this);
+ }
+ super.onPause();
+ }
+
+ @Override
+ protected void onDestroy() {
+ inactivityTimer.shutdown();
+ super.onDestroy();
+ }
+
+ @Override
+ public void surfaceCreated(SurfaceHolder holder) {
+ if (holder == null) {
+ Log.d(TAG, "*** WARNING *** surfaceCreated() gave us a null surface!");
+ }
+ if (!isHasSurface) {
+ isHasSurface = true;
+ initCamera(holder);
+ }
+ }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder holder) {
+ isHasSurface = false;
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
-}
\ No newline at end of file
+
+ /**
+ * A valid barcode has been found, so give an indication of success and show
+ * the results.
+ *
+ * @param rawResult The contents of the barcode.
+ * @param bundle The extras
+ */
+ @Override
+ public void handleDecode(Result rawResult, Bundle bundle) {
+ inactivityTimer.onActivity();
+ beepManager.playBeepSoundAndVibrate();
+ doProcess(rawResult.getText());
+ restartPreviewAfterDelay(3000);
+ }
+
+ private void initCamera(SurfaceHolder surfaceHolder) {
+ if (surfaceHolder == null) {
+ throw new IllegalStateException("No SurfaceHolder provided");
+ }
+ if (cameraManager.isOpen()) {
+ Log.w(TAG, "initCamera() while already open -- late SurfaceView callback?");
+ return;
+ }
+ try {
+ cameraManager.openDriver(surfaceHolder);
+ // Creating the handler starts the preview, which can also throw a
+ // RuntimeException.
+ if (handler == null) {
+ handler = new CaptureActivityHandler(this, cameraManager, DecodeThread.ALL_MODE);
+ }
+
+ initCrop();
+ } catch (IOException ioe) {
+ Log.w(TAG, ioe);
+ Toast.makeText(this, com.zxing.R.string.capture_no_camera, Toast.LENGTH_SHORT).show();
+ finish();
+ } catch (RuntimeException e) {
+ Log.w(TAG, "Unexpected error initializing camera", e);
+ Toast.makeText(this, com.zxing.R.string.capture_no_camera, Toast.LENGTH_SHORT).show();
+ finish();
+ }
+ }
+
+ public void restartPreviewAfterDelay(long delayMS) {
+ if (handler != null) {
+ handler.sendEmptyMessageDelayed(com.zxing.R.id.restart_preview, delayMS);
+ }
+ }
+
+ @Override
+ public Rect getCropRect() {
+ return mCropRect;
+ }
+
+ /**
+ * 鍒濆鍖栨埅鍙栫殑鐭╁舰鍖哄煙
+ */
+ private void initCrop() {
+ int cameraWidth = cameraManager.getCameraResolution().y;
+ int cameraHeight = cameraManager.getCameraResolution().x;
+
+ /** 鑾峰彇甯冨眬涓壂鎻忔鐨勪綅缃俊鎭� */
+ int[] location = new int[2];
+ scanCropView.getLocationInWindow(location);
+
+ int cropLeft = location[0];
+ int cropTop = location[1] - getStatusBarHeight();
+
+ int cropWidth = scanCropView.getWidth();
+ int cropHeight = scanCropView.getHeight();
+
+ /** 鑾峰彇甯冨眬瀹瑰櫒鐨勫楂� */
+ int containerWidth = scanContainer.getWidth();
+ int containerHeight = scanContainer.getHeight();
+
+ /** 璁$畻鏈�缁堟埅鍙栫殑鐭╁舰鐨勫乏涓婅椤剁偣x鍧愭爣 */
+ int x = cropLeft * cameraWidth / containerWidth;
+ /** 璁$畻鏈�缁堟埅鍙栫殑鐭╁舰鐨勫乏涓婅椤剁偣y鍧愭爣 */
+ int y = cropTop * cameraHeight / containerHeight;
+
+ /** 璁$畻鏈�缁堟埅鍙栫殑鐭╁舰鐨勫搴� */
+ int width = cropWidth * cameraWidth / containerWidth;
+ /** 璁$畻鏈�缁堟埅鍙栫殑鐭╁舰鐨勯珮搴� */
+ int height = cropHeight * cameraHeight / containerHeight;
+
+ /** 鐢熸垚鏈�缁堢殑鎴彇鐨勭煩褰� */
+ mCropRect = new Rect(x, y, width + x, height + y);
+ }
+
+ private int getStatusBarHeight() {
+ try {
+ Class<?> c = Class.forName("com.android.internal.R$dimen");
+ Object obj = c.newInstance();
+ Field field = c.getField("status_bar_height");
+ int x = Integer.parseInt(field.get(obj).toString());
+ return getResources().getDimensionPixelSize(x);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return 0;
+ }
+
+ private void doProcess(String result) {
+ Log.d("panlili", "scanResult: " + result);
+ /*if (!DeviceHelper.getNetworkState()) {
+ Toast.makeText(this, R.string.capture_no_network, Toast.LENGTH_SHORT).show();
+ return;
+ }*/
+
+ if (TextUtils.isEmpty(result)) {
+ Toast.makeText(this, com.zxing.R.string.capture_no_result, Toast.LENGTH_SHORT).show();
+ } else {
+ Intent intent = new Intent();
+ intent.putExtra("data", result);
+ setResult(RESULT_OK, intent);
+ finish();
+ }
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null) {
+ Uri originalUri = data.getData();
+ if (originalUri != null) {
+ String path = originalUri.getPath();
+ String[] proj = {MediaStore.Images.Media.DATA};
+ Cursor cursor = getContentResolver().query(originalUri, proj, null, null, null);
+ if (cursor != null) {
+ int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
+ cursor.moveToFirst();
+ path = cursor.getString(column_index);
+ cursor.close();
+ }
+
+ if (!TextUtils.isEmpty(path)) {
+ handleQRCodeFormPhoto(path);
+ } else {
+ Toast.makeText(this, "鍥剧墖宸叉崯鍧忥紝璇烽噸鏂伴�夋嫨锛�", Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+ }
+
+ /**
+ * 瑙f瀽鍥惧簱閫夋嫨鐨勪簩缁寸爜
+ */
+ public void handleQRCodeFormPhoto(final String filePath) {
+ Thread dealThread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ Hashtable<DecodeHintType, String> hints = new Hashtable<>();
+ hints.put(DecodeHintType.CHARACTER_SET, "utf-8");
+ RGBLuminanceSource source = null;
+ try {
+ source = new RGBLuminanceSource(filePath);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
+ QRCodeReader reader = new QRCodeReader();
+ Result result;
+ try {
+ result = reader.decode(binaryBitmap, hints);
+ if (!TextUtils.isEmpty(result.getText())) {
+ dealUIInfo(result.getText());
+ } else {
+ dealUIInfo(null);
+ }
+ } catch (NotFoundException | ChecksumException | FormatException e) {
+ dealUIInfo(null);
+ e.printStackTrace();
+ }
+ }
+ });
+ dealThread.start();
+ }
+
+ private void dealUIInfo(final Object progressInfo) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ if (progressInfo == null) {
+ Toast.makeText(FastScanActivity.this, com.zxing.R.string.capture_no_result2, Toast.LENGTH_SHORT).show();
+ } else {
+ doProcess(progressInfo.toString());
+ }
+ }
+ });
+ }
+
+
+ /**
+ * 闂厜鐏紑鍚垨鑰呭叧闂�
+ */
+ private void flashLightOnOrOff() {
+//
+ android.hardware.Camera camera = cameraManager.getCamera();
+ if (camera == null) {
+ return;
+ }
+ android.hardware.Camera.Parameters parameters = camera.getParameters();
+// 鍒ゆ柇闂厜鐏綋鍓嶇姸鎬�
+ if (Camera.Parameters.FLASH_MODE_OFF.equals(parameters.getFlashMode())) {
+ onLight(camera, parameters);
+ } else if (Camera.Parameters.FLASH_MODE_TORCH.equals(parameters.getFlashMode())) {
+ offLight(camera, parameters);
+ }
+ }
+
+ private void onLight(android.hardware.Camera camera, Camera.Parameters parameters) {
+ parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
+ camera.setParameters(parameters);
+ }
+
+ private void offLight(android.hardware.Camera camera, Camera.Parameters parameters) {
+ parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
+ camera.setParameters(parameters);
+ }
+
+
+}
--
Gitblit v1.8.0