【问题标题】:Android: Problem with the camera opening in webviewAndroid:在 webview 中打开相机的问题
【发布时间】:2022-07-21 23:27:03
【问题描述】:

在 webview 中打开摄像头苦苦挣扎了几天后,我决定在这里问这个问题。

所以, 我的应用程序中有一个 webview,它打开一个带有摄像头的网页。为了避免这些问题,我无法访问网站代码。

我在 android sdk 30 和 Pixel 3 api 30 上工作。我尝试在旧的 android SDK (23 - 24) 或最新的 android 12 上打开它。尝试在目标 sdk 版本 29 上添加android:requestLegacyExternalStorage。

当我尝试在模拟器上的 chrome 中打开给定网站时,它可以正常工作。

我认为相机权限可能有问题,但我不知道如何检查它。为摄像头调用requestPermissions 也没有帮助。

我只是一直收到这个错误:

E/cr_VideoCapture: getCameraCharacteristics: 
    java.lang.IllegalArgumentException: supportsCameraApi:2340: Unknown camera ID 0
        at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:1001)
        at android.hardware.camera2.CameraManager.getCameraCharacteristics(CameraManager.java:449)
        at ft0.i(chromium-TrichromeWebViewGoogle6432.aab-stable-489612734:1047)
        at org.chromium.media.VideoCaptureFactory.isLegacyOrDeprecatedDevice(chromium-TrichromeWebViewGoogle6432.aab-stable-489612734:1339)
        at org.chromium.media.VideoCaptureFactory.getFacingMode(chromium-TrichromeWebViewGoogle6432.aab-stable-489612734:93)
     Caused by: android.os.ServiceSpecificException: supportsCameraApi:2340: Unknown camera ID 0 (code 3)
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2387)
        at android.os.Parcel.createException(Parcel.java:2357)
        at android.os.Parcel.readException(Parcel.java:2340)
        at android.os.Parcel.readException(Parcel.java:2282)
        at android.hardware.ICameraService$Stub$Proxy.supportsCameraApi(ICameraService.java:906)
        at android.hardware.camera2.CameraManager.supportsCameraApiLocked(CameraManager.java:1054)
        at android.hardware.camera2.CameraManager.supportsCamera2ApiLocked(CameraManager.java:1030)
        at android.hardware.camera2.CameraManager.getCameraCharacteristics(CameraManager.java:422)
        at ft0.i(chromium-TrichromeWebViewGoogle6432.aab-stable-489612734:1047) 
        at org.chromium.media.VideoCaptureFactory.isLegacyOrDeprecatedDevice(chromium-TrichromeWebViewGoogle6432.aab-stable-489612734:1339) 
        at org.chromium.media.VideoCaptureFactory.getFacingMode(chromium-TrichromeWebViewGoogle6432.aab-stable-489612734:93) 

谢谢:)

【问题讨论】:

    标签: android android-webview android-camera2


    【解决方案1】:

    确保在 AndroidManifest.xml 中添加权限

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA"/>
    
    <queries>
        <intent>
            <action android:name="android.media.action.IMAGE_CAPTURE" />
        </intent>
    </queries>
    

    然后在您的活动中,您可以像下面这样检查相机权限

    if(ContextCompat.checkSelfPermission(getApplicationContext(),
                Manifest.permission.WRITE_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED &&
                ContextCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.CAMERA)==PackageManager.PERMISSION_GRANTED) { 
    

    }

    在这种情况下,您可以使用 android.provider.MediaStore.ACTION_IMAGE_CAPTURE 从 packagemanager 获取相机意图列表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-24
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      相关资源
      最近更新 更多