【问题标题】:Camera.open() returns nullCamera.open() 返回 null
【发布时间】:2012-08-16 17:58:40
【问题描述】:

当我调用 mCamera = Camera.open() 时它返回 null,这可能是什么原因造成的?我的设备是 Nexus 7。

我已经在我的AndroidManifest.xml 中设置了权限:

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

【问题讨论】:

  • 试试this
  • 同样,camera = Camera.open(); 返回 null。
  • 是的...不过我有点傻... API 显示为Creates a new Camera object to access the first back-facing camera on the device. If the device does not have a back-facing camera, this returns null....Nexus 7 没有后置摄像头,只有前置摄像头。
  • 是的。之前,看到设备我不知道这一点。只知道我通过the document 知道这一点尝试打开辅助摄像头。而且,只要试试this

标签: android android-camera


【解决方案1】:

想通了

您需要致电Camera.open(0)

这仅适用于 NEXUS 7 设备,因为它只有一个摄像头,因此仅在仅针对该设备时才有用。

【讨论】:

  • 另请阅读this
  • 这是错误的答案。首先,0 是一个硬编码的数字。其次,正如@Praveen 提到的,您应该同时使用getNumberOfCameras()open(int)
  • 我知道。但0 是硬编码值。我会避免使用它。你可以说我的意见是错误的,这取决于你。
  • LaiVung / user1521536 是正确的。不要硬编码相机 ID 值。这个答案是一个破损的捷径,在一个实例中只适用于一个人。
  • 来吧伙计们,硬编码值怎么可能是您问题的正确答案?在不使用这些该死的捷径的情况下开始理解问题。
【解决方案2】:

对于在 Android 6.0+ 上测试应用的用户,请确保您已实现 Runtime Permission。 因为您的 AndroidManifest 文件中的简单权限是不够的。

【讨论】:

  • 不敢相信与答案相比,这有更少的支持。这可能只是解决方案,对我有用...
  • 嗯,第一个答案是当时,没有运行时权限之类的东西。无论如何,很高兴帮助:)
【解决方案3】:

我通过以下步骤解决了这个问题。

  1. 打开“AVD Manager”并选择您正在使用的虚拟设备

  2. 单击“编辑”按钮

  3. 在“硬件”部分,选择“新建”并添加“配置后置摄像头”并单击“确定”。

  4. 在条目旁边的下拉列表中,选择“webcam0”或您要使用的摄像头对应的那个

  5. 停止 AVD 并重新启动。

【讨论】:

    【解决方案4】:

    如果您构建 API 22 以上的应用程序,也许您应该请求权限。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2020-06-19
    相关资源
    最近更新 更多