Quellcode durchsuchen

add: 新增相机预览接口

huwanxiao vor 11 Monaten
Ursprung
Commit
82da133571

+ 31 - 1
app/src/main/java/com/naz/sdkdemo/MainActivity.java

@@ -13,6 +13,7 @@ import android.content.pm.PackageManager;
 import android.location.LocationManager;
 import android.os.Build;
 import android.os.Environment;
+import android.os.Handler;
 import android.provider.MediaStore;
 import android.text.TextUtils;
 import android.util.Log;
@@ -43,6 +44,7 @@ import com.naz.sdkdemo.helper.SerialPortManager;
 import com.naz.sdkdemo.http.ApiHelper;
 import com.naz.sdkdemo.utils.MyTools;
 import com.naz.sdkdemo.weight.UserCache;
+import com.naz.sdkdemo.weight.XToast;
 import com.tencent.smtt.export.external.interfaces.WebResourceError;
 import com.tencent.smtt.export.external.interfaces.WebResourceRequest;
 import com.tencent.smtt.sdk.WebSettings;
@@ -71,6 +73,7 @@ import androidx.camera.core.ImageCapture;
 import androidx.camera.core.ImageCaptureException;
 import androidx.camera.core.Preview;
 import androidx.camera.lifecycle.ProcessCameraProvider;
+import androidx.camera.view.PreviewView;
 import androidx.core.app.ActivityCompat;
 import androidx.core.content.ContextCompat;
 import androidx.lifecycle.LifecycleOwner;
@@ -94,6 +97,7 @@ public class MainActivity extends BaseActivity {
 
     String savePath;
     private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;
+    private PreviewView previewView;
     private ProcessCameraProvider cameraProvider;
     private ImageCapture imageCapture;
 
@@ -110,6 +114,7 @@ public class MainActivity extends BaseActivity {
         ll_nonet = findViewById(R.id.ll_nonet);
         ll_web = findViewById(R.id.ll_web);
         mWebView = findViewById(R.id.webview);
+        previewView = findViewById(R.id.previewView);
         checkNet();
         findViewById(R.id.bt_ref).setOnClickListener(new View.OnClickListener(){
 
@@ -396,7 +401,30 @@ public class MainActivity extends BaseActivity {
         @JavascriptInterface
         public void openCamera() {
             Log.e(TAG, "openCamera");
+            // 打开摄像头
             toOpenCamera();
+            // 打开摄像头预览
+            // openCameraPreview();
+        }
+
+        @JavascriptInterface
+        public void openCameraPreview() {
+            if (cameraProviderFuture != null) {
+                // 确保摄像头打开后再显示预览组件
+                previewView.setVisibility(View.VISIBLE);
+            } else {
+                XToast.showToast("打开摄像头预览失败");
+            }
+        }
+
+        @JavascriptInterface
+        public void closeCameraPreview() {
+            if (cameraProviderFuture != null) {
+                // 确保摄像头打开后再显示预览组件
+                previewView.setVisibility(View.GONE);
+            } else {
+                XToast.showToast("关闭摄像头预览失败");
+            }
         }
 
         @JavascriptInterface
@@ -476,9 +504,10 @@ public class MainActivity extends BaseActivity {
             try {
                 ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
                 bindPreview(cameraProvider);
-            } catch (ExecutionException | InterruptedException e) {
+            } catch (Exception e) {
                 // No errors need to be handled for this Future.
                 // This should never be reached.
+                Log.i(TAG, "toOpenCamera: exception: " + e.getMessage());
             }
         }, ContextCompat.getMainExecutor(this));
     }
@@ -736,6 +765,7 @@ public class MainActivity extends BaseActivity {
                     // 设置JPEG的质量为85%
                 .setJpegQuality(85)
                 .build();
+        preview.setSurfaceProvider(previewView.getSurfaceProvider());
         cameraProvider.unbindAll();//解绑组件
         cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview, imageCapture);
 

+ 8 - 0
app/src/main/res/layout/activity_home_web.xml

@@ -15,6 +15,14 @@
             android:id="@+id/webview"/>
     </LinearLayout>
 
+    <androidx.camera.view.PreviewView
+        android:id="@+id/previewView"
+        android:visibility="gone"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_gravity="center"
+    />
+
     <LinearLayout
         android:visibility="gone"
         android:id="@+id/ll_nonet"