diff --git a/app/android/AndroidManifest.xml b/app/android/AndroidManifest.xml index f0cf4c9..9f5869f 100644 --- a/app/android/AndroidManifest.xml +++ b/app/android/AndroidManifest.xml @@ -27,6 +27,7 @@ + - + + + + + { + ViewGroup rootView = (ViewGroup) getWindow().getDecorView().getRootView(); + makeViewTransparent(rootView); + }); + } + + private void makeViewTransparent(ViewGroup viewGroup) { + for (int i = 0; i < viewGroup.getChildCount(); i++) { + View child = viewGroup.getChildAt(i); + if (child instanceof ViewGroup) { + makeViewTransparent((ViewGroup) child); + } else { + // 找到可能是 Vulkan 渲染层的视图并设置为透明 + if (child.getBackground() != null) { + child.setBackgroundColor(Color.TRANSPARENT); } } - }); + } + } + + private boolean hasCameraPermission() { + return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) + == PackageManager.PERMISSION_GRANTED; + } + + private void requestCameraPermission() { + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.CAMERA}, + REQUEST_CAMERA_PERMISSION); + } + + private static final int REQUEST_CAMERA_PERMISSION = 1001; + + private void startCamera() { + ListenableFuture cameraProviderFuture = + ProcessCameraProvider.getInstance(this); + + cameraProviderFuture.addListener(() -> { + try { + cameraProvider = cameraProviderFuture.get(); + + // 创建预览用例 + Preview preview = new Preview.Builder().build(); + + // 选择后置摄像头 + CameraSelector cameraSelector = new CameraSelector.Builder() + .requireLensFacing(CameraSelector.LENS_FACING_BACK) + .build(); + + // 将预览绑定到 PreviewView + preview.setSurfaceProvider(previewView.getSurfaceProvider()); + + // 绑定到生命周期 + camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview); + + } catch (ExecutionException | InterruptedException e) { + Log.e("MainActivity", "Error starting camera: " + e.getMessage()); + } + }, ContextCompat.getMainExecutor(this)); + } + + private static final int REQUEST_CODE_PERMISSIONS = 1001; + private static final String[] REQUIRED_PERMISSIONS = new String[]{Manifest.permission.CAMERA}; + private static final String TAG = "MainActivity"; + + private boolean allPermissionsGranted() { + for (String permission : REQUIRED_PERMISSIONS) { + if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { + return false; + } + } + return true; + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == REQUEST_CODE_PERMISSIONS) { + if (allPermissionsGranted()) { + startCamera(); + } else { + Log.e(TAG, "Permissions not granted by the user."); + finish(); // Close the activity if permission is denied + } + } } private void addButtonToLayout() {