Jelajahi Sumber

优化拍照

zhenghao 1 tahun lalu
induk
melakukan
4511964c40
1 mengubah file dengan 62 tambahan dan 60 penghapusan
  1. 62 60
      app/src/main/java/com/naz/sdkdemo/MainActivity.java

+ 62 - 60
app/src/main/java/com/naz/sdkdemo/MainActivity.java

@@ -343,13 +343,27 @@ public class MainActivity extends BaseActivity {
             Log.e(TAG, "closeScan");
             closeScan();
         }
+
+        @JavascriptInterface
+        public void openCamera() {
+            Log.e(TAG, "openCamera");
+            toOpenCamera();
+        }
+
+        @JavascriptInterface
+        public void closeCamera() {
+            Log.e(TAG, "closeCamera");
+            toCloseCamera();
+        }
     }
 
-    private void toTakePhoto() {
-        Log.e("-------->","------>toTakePhoto");
-        long timeStamp = System.currentTimeMillis();
-        savePath = timeStamp+".jpg";
-        Log.e("-------->","111------>savePath="+savePath);
+    private void toCloseCamera() {
+        if (cameraProvider!=null){
+            cameraProvider.unbindAll();
+        }
+    }
+
+    private void toOpenCamera() {
         // 请求 CameraProvider
         cameraProviderFuture = ProcessCameraProvider.getInstance(this);
         //检查 CameraProvider 可用性,验证它能否在视图创建后成功初始化
@@ -362,9 +376,48 @@ public class MainActivity extends BaseActivity {
                 // This should never be reached.
             }
         }, ContextCompat.getMainExecutor(this));
+    }
+
+    private void toTakePhoto() {
+        Log.e("-------->","------>toTakePhoto");
+        long timeStamp = System.currentTimeMillis();
+        savePath = timeStamp+".jpg";
+
+        // 通过 ContentValues 对象设置文件名和文件类型
+        ContentValues contentValues = new ContentValues();
+        contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, savePath);
+        contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
+
+        File dir = new File(Environment.getExternalStorageDirectory() + "/camera/");
+        if (!dir.exists()) {
+            dir.mkdirs();
+        }
+        //创建文件
+        File file = new File(dir,savePath);
+        ImageCapture.OutputFileOptions outputFileOptions = new ImageCapture.OutputFileOptions.Builder(file).build();
 
-//        String photoPath = "";
-//        mWebView.loadUrl("javascript:uploadPhotoPath('" + photoPath + "')");
+        imageCapture.takePicture(
+                // 第一个参数 OutputFileOptions 指定了照片保存的位置和格式等信息。
+                outputFileOptions,
+                // 第二个参数 Executor 指定了保存照片时要运行的线程。
+                ContextCompat.getMainExecutor(this),
+                // 第三个参数 OnImageSavedCallback 指定了保存照片完成后的回调函数,可以在其中进行一些提示或其他操作。
+                new ImageCapture.OnImageSavedCallback() {
+                    @SuppressLint("RestrictedApi")
+                    @Override
+                    public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
+                        Log.e("-------->","------>savePath="+outputFileResults.getSavedUri().getPath());
+                        Log.e("-------->","------>保存成功");
+                        Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
+                        mWebView.loadUrl("javascript:uploadPhotoPath('" + outputFileOptions.getFile().getAbsolutePath() + "')");
+                    }
+
+                    @Override
+                    public void onError(@NonNull ImageCaptureException exception) {
+                        Log.e("----------->","------->"+exception.getMessage());
+                        Toast.makeText(MainActivity.this, "Error: " + exception.getMessage(), Toast.LENGTH_SHORT).show();
+                    }
+                });
     }
 
     private void checkNet() {
@@ -377,7 +430,6 @@ public class MainActivity extends BaseActivity {
         }
     }
 
-//    String mUrl = "https://www.baidu.com/";
     String mUrl = "https://dwytb.qingyaokeji.com/index.html#/";
     private void getUrl() {
         mWebView.loadUrl(mUrl);
@@ -546,9 +598,7 @@ public class MainActivity extends BaseActivity {
         CameraSelector cameraSelector = new CameraSelector.Builder()
                 .requireLensFacing(CameraSelector.LENS_FACING_BACK)//CameraSelector.LENS_FACING_EXTERNAL
                 .build();
-
-//        preview.setSurfaceProvider(previewView.getSurfaceProvider());
-        // 创建一个 ImageCapture 对象,用于拍摄照片。
+// 创建一个 ImageCapture 对象,用于拍摄照片。
         // 设置拍照模式为最小化延迟模式,这意味着拍照时将尽可能快地捕获图像。
         imageCapture = new ImageCapture.Builder()
                 .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
@@ -556,55 +606,7 @@ public class MainActivity extends BaseActivity {
         cameraProvider.unbindAll();//解绑组件
         cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview, imageCapture);
 
-        // 通过 ContentValues 对象设置文件名和文件类型
-        ContentValues contentValues = new ContentValues();
-        contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, savePath);
-        contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
-
-        File dir = new File(Environment.getExternalStorageDirectory() + "/camera/");
-        if (!dir.exists()) {
-            dir.mkdirs();
-        }
-        //创建文件
-        File file = new File(dir,savePath);
-        ImageCapture.OutputFileOptions outputFileOptions = new ImageCapture.OutputFileOptions.Builder(file).build();
-        imageCapture.takePicture(
-                // 第一个参数 OutputFileOptions 指定了照片保存的位置和格式等信息。
-//                new ImageCapture.OutputFileOptions.Builder(
-//                        getContentResolver(),
-//                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
-//                        contentValues
-//                ).build(),
-                outputFileOptions,
-                // 第二个参数 Executor 指定了保存照片时要运行的线程。
-                ContextCompat.getMainExecutor(this),
-                // 第三个参数 OnImageSavedCallback 指定了保存照片完成后的回调函数,可以在其中进行一些提示或其他操作。
-                new ImageCapture.OnImageSavedCallback() {
-                    @SuppressLint("RestrictedApi")
-                    @Override
-                    public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
-                        Log.e("-------->","333------>savePath="+outputFileResults.getSavedUri().getPath());
-//                        Log.e("-------->","444------>savePath="+outputFileOptions.getFile().getAbsolutePath());
-                        Log.e("-------->","------>保存成功");
-//                        Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
-//                        Log.e("-------->","------->path="+file.getAbsolutePath());
-//                        Toast.makeText(MainActivity.this, "path="+savePath, Toast.LENGTH_SHORT).show();
-//                        Toast.makeText(MainActivity.this, "path="+getImagePath(savePath), Toast.LENGTH_SHORT).show();
-//                        new Handler().postDelayed(new Runnable() {
-//                            @Override
-//                            public void run() {
-//                                Toast.makeText(MainActivity.this, "保存路径"+getImagePath(savePath), Toast.LENGTH_SHORT).show();
-                                mWebView.loadUrl("javascript:uploadPhotoPath('" + outputFileOptions.getFile().getAbsolutePath() + "')");
-//                            }
-//                        }, 2000);
-                    }
-
-                    @Override
-                    public void onError(@NonNull ImageCaptureException exception) {
-                        Log.e("----------->","------->"+exception.getMessage());
-                        Toast.makeText(MainActivity.this, "Error: " + exception.getMessage(), Toast.LENGTH_SHORT).show();
-                    }
-                });
+//        preview.setSurfaceProvider(previewView.getSurfaceProvider());
     }
 
     public static int getStrLength(String xm){