我尝试使用实际设备通过 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");
}
Cameramanager说
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" />
P.S:
我正在使用此示例Render camera preview using OpenGL ES 2.0 on Android API 21 or higher
答案 0 :(得分:1)
如果你只是复制那个例子,我注意到它有以下几行:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
前置摄像头可能不支持,因为它可能没有闪光灯。您需要检查实际支持的AE模式 - 样本设置的各种其他设置也是如此,它不会检查设备实际支持的内容。
也就是说,如果值不好,你应该收到一个错误,但它可能会在CameraCaptureSession.CaptureListener.onCaptureFailed中出现,并且示例没有收听那些。如果您查看所有日志记录,可能还有一些来自摄像头服务的logcat,而不仅仅是您自己的应用程序日志。
但是请尝试删除该行,看看它是否有效。
答案 1 :(得分:0)
我最终将 Sony Xperia Z5 premium 更改为另一台设备,但效果非常好。 看起来索尼正面临着新API的一些问题,正如我在以下链接中看到的那样:
可能有一个解决方法,但无论如何我正在为特定目的制作应用程序我不希望它在所有设备上工作
答案 2 :(得分:0)
首先获得Camera
这样的服务
CameraManager cameraManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);