2

我正在尝试使用实际设备通过Camera2 API访问前置摄像头

尝试时出现问题

cameraManager.openCamera(..,..,..)

try {
        CameraCharacteristics characteristics = manager.getCameraCharacteristics(mCameraID);
            if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {
                throw new RuntimeException("Time out waiting to lock camera opening.");
            }
            manager.openCamera(mCameraID, mStateCallback, mBackgroundHandler);
        } catch (CameraAccessException e) {
            Log.e("mr", "OpenCamera - Camera Access Exception");
        } catch (IllegalArgumentException e) {
            Log.e("mr", "OpenCamera - Illegal Argument Exception");
        } catch (SecurityException e) {
            e.printStackTrace();
            Log.e("mr", "OpenCamera - Security Exception:");
        } catch (InterruptedException e) {
            Log.e("mr", "OpenCamera - Interrupted Exception");
        }

相机经理说

I/CameraManagerGlobal:连接到相机服务

来自这个CameraManager.java函数

private void connectCameraServiceLocked() {
            // Only reconnect if necessary
            if (mCameraService != null) return;

            Log.i(TAG, "Connecting to camera service");

然后我的 GLSurfaceView 保持空白

AndroidMainfest.xml

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

PS:

  • 它适用于后置摄像头
  • 它适用于 nexus 6 API 23 模拟器
  • Android M 在运行时请求权限
  • 我使用GLSurfaceView作为取景器
  • 前置摄像头在使用普通CameraAPITextureView的同一设备上完美运行
  • 试图卸载/重新启动/清除缓存
  • 我使用的设备是Sony Z5 premium

我正在使用此示例在 Android API 21 或更高版本上使用 OpenGL ES 2.0 渲染相机预览

4

3 回答 3

1

如果您只是复制该示例,我注意到它具有以下行:

mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

前置摄像头可能不支持这一点,因为它可能没有闪光灯。您需要检查实际支持哪些 AE 模式 - 样本集的各种其他设置也是如此,它不检查设备实际支持的内容。

也就是说,如果值错误,您应该会收到一个错误,但它可能会出现在 CameraCaptureSession.CaptureListener.onCaptureFailed 上,并且示例没有在听那些。如果您查看所有日志记录,而不仅仅是您自己的应用程序的日志,则可能还有来自相机服务的一些 logcat。

但是尝试删除该行,看看它是否有效。

于 2016-06-03T00:59:03.547 回答
0

我已经将Sony Xperia Z5 Premium更换为另一台设备,它运行良好。正如我在以下链接中看到的那样,索尼似乎面临着新 API 的一些问题:

索尼 Camera2 API 限制

可能有一个解决方法,但无论如何我正在为特定目的制作应用程序,我不希望它在所有设备上工作

于 2016-06-03T19:52:02.250 回答
0

首先得到Camera这样的服务

CameraManager cameraManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
于 2018-01-22T03:58:40.203 回答