似乎您的设备不支持相机(或者相机被锁定)。

19

Android opencv示例和教程一直运行正常,但某一天我对所有这些内容都出现以下提示:
“似乎您的设备不支持相机(或者它被锁定)。应用程序将被关闭”
请帮忙解决,我该如何修复?

我已经重新安装了opencv并重新导入,还创建了新的模拟器,但问题仍然存在。


2
关闭设备并重新启动。尝试重新安装OpenCV。 - Sohyun Ahn
请看这个链接:http://answers.opencv.org/question/1574/camera-not-working - Mahm00d
我曾经遇到过同样的问题,它是通过以下方式解决的。 请参见http://stackoverflow.com/a/42661642/5850039 - Tugou
6个回答

37

前往您的设备设置 -> 应用程序 -> 您的应用程序 -> 权限 -> 开启相机权限。

对我有用。


这就是我必须要做的事情。不确定为什么没有授予权限。 - AutonomousApps
1
@AutonomousApps,因为您正在使用API/构建工具> 23。 - orimen
对我来说可行,但像Geraldo的回答一样向用户请求权限可能更好。 - WillC
为了在运行时解决它,而不是手动解决,请查看我的答案:https://dev59.com/Y2Ij5IYBdhLWcg3wEhQA#44087946。 - Geraldo Neto

19

检查AndroidManifest.xml中的相机权限。

<uses-permission android:name="android.permission.CAMERA"/>

    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera.autofocus"/>
    <uses-feature android:name="android.hardware.camera.front"/>
    <uses-feature android:name="android.hardware.camera.front.autofocus"/>

这对我有用。


11

来自Android文档

从 Android 6.0(API级别23)开始,用户在应用程序运行时授予权限,而不是在安装应用程序时。

这意味着在 Android 23 或更高版本中,除了清单外,您还需要在运行时请求权限。在此示例中,请求相机访问权限。

要实现此操作,您可以使用以下代码:

// First check android version 
if (MyVersion > Build.VERSION_CODES.LOLLIPOP_MR1) {
//Check if permission is already granted
//thisActivity is your activity. (e.g.: MainActivity.this)
    if (ContextCompat.checkSelfPermission(thisActivity,
                    Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) {

        // Give first an explanation, if needed.
        if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                Manifest.permission.CAMERA)) {

            // Show an explanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.

        } else {

            // No explanation needed, we can request the permission.

            ActivityCompat.requestPermissions(thisActivity,
                    new String[]{Manifest.permission.CAMERA},
                    1);
        }
    }
}

您也可以处理请求响应,如 文档 中所述。

希望对您有所帮助!


我应该把这段代码放在哪里?这似乎根本不是Java代码,在尝试将其粘贴到MainActivity的某个位置时出现了许多错误,请明确指出应该放在哪里。 - Mich
嗨,Mich!这是Java。我建议你阅读答案中链接的文档,以便获得更详细和更新的信息。 - Geraldo Neto

2

我曾经遇到过这个问题,解决方法是结束掉其他正在使用相机的应用程序。可能是之前的一些教程还在后台运行。


2
在我的情况下,问题出在以下地方:
我的应用程序在另一个活动中使用了Android相机
但是,在另一个活动完成之后,它没有释放相机(锁定)
当我在另一个活动上释放相机之后,这个对话框就不会再次显示。
因此,通常要解决此问题,需要:
  1. 检查相机权限
  2. 检查相机没有被锁定(通过在任何其他活动中使用后释放)

与活动生命周期相关的SurfaceHolder回调问题 - Ahmed Nabil

0

这些示例应该可以工作,因为它们使用的是JavaCamera。当我尝试使用本机相机时,我遇到了这个问题。似乎本机相机并不适用于每一种手机。请参见this

我必须补充说明,在某些设备上,openCV本机相机根本无法工作,bug 2359


当我在模拟器上运行时,我遇到了类似的问题,解决方法是:进入模拟器,设置->应用->我的应用->权限,然后启用“相机”权限。我发现它被请求但未启用。 - khkarens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接