在CaptureSession.setRepeatingRequest()上接收CameraAccessException:CAMERA_ERROR(3)

时间:2017-11-07 01:13:37

标签: java android hardware android-camera2

我从onCreate()方法运行以下代码。在这段代码之外只是很多对象声明和回调的实例化。

capSess.setRepeatingRequest(capReq.build(), CCSlistener, handle);

执行此行时,我在控制台中收到以下错误:

android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): submitRequestList:257: Camera 0:  Got error Invalid argument (-22) after trying to set streaming request

if ( ContextCompat.checkSelfPermission(thisAct, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ) {
                        ActivityCompat.requestPermissions((Activity)thisAct, new String[] { Manifest.permission.CAMERA }, CAMERA_REQUEST);
                    }

在线搜索后,似乎这是指“ERROR_CAMERA_DISABLED”代码, 表示由于设备政策而无法打开相机设备。

这最初使我想到了直接查看权限,但如下所示:

In [814]: txt
Out[814]: '[[{"x" : 1, "y" : 4, "z" : 6},{"x" : 1, "y" : 2, "z" : 8}],[{"x" : 5, "y" : 1, "z" : 6}],[{"x" : 15, "y" : 44, "z" : 6},{"x" : 12, "y" : 22, "z" : 56}]]'


In [818]: data = json.loads(txt)
In [819]: data
Out[819]: 
[[{'x': 1, 'y': 4, 'z': 6}, {'x': 1, 'y': 2, 'z': 8}],
 [{'x': 5, 'y': 1, 'z': 6}],
 [{'x': 15, 'y': 44, 'z': 6}, {'x': 12, 'y': 22, 'z': 56}]]

如果应用尚未拥有权限,我会检查权限并提示用户。我还检查了清单文件中的应用程序设置,并在设备上确认我确实拥有相机硬件权限。 任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

我以这种方式解决了这个问题;也许它可以为您提供帮助;

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.N) {
                mCaptureSession.stopRepeating();
                mCaptureSession.abortCaptures();
            }
            mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null);

答案 1 :(得分:0)

在Huawei平板电脑上运行Camera Basic Sample,我遇到了这个问题。 上面的答案也适用。只需评论 mCaptureSession.abortCaptures(); 即可。

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.N) {
    mCaptureSession.stopRepeating();
    mCaptureSession.abortCaptures();
}

查看此github issue以获得更多详细信息。

还在 mCaptureSession.abortCaptures(); 之后添加 sleep(100); (从SystemClock.sleep导入)似乎也可以解决此问题。 (如@CatalinM所评论)