Camera.open()返回null。

22

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

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

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

请尝试这个 - Praveenkumar
再次执行 camera = Camera.open(); 返回 null。 - Cheetah
4
是的...虽然我有点儿笨...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 没有后置摄像头,只有前置摄像头。 - Cheetah
是的。在看到这个设备之前,我不知道这一点。只是通过文档了解到这一点。尝试打开次要摄像头。还有,只需尝试这个 - Praveenkumar
4个回答

27

明白了,

你需要调用Camera.open(0)

这仅在Nexus 7设备上有效和可行,因为它只有一个相机,所以仅在仅针对该设备时有用。


2
也请阅读此文 - Praveenkumar
5
这个回答是错误的。首先,0是一个硬编码的数字。其次,正如@Praveen提到的那样,你应该同时使用getNumberOfCameras()open(int) - user1521536
2
我知道。但是 0 是硬编码的值。我会避免使用它。你可以认为我的观点是错误的,这取决于你。 - user1521536
2
LaiVung / user1521536 是正确的。不要硬编码相机 ID 值。这个答案是一个破解的捷径,只在某一个情况下适用于一个人。 - user901309
1
来吧,伙计们,硬编码的值怎么可能是解决问题的正确答案呢?开始理解问题,不要使用这些该死的捷径。 - andrea.rinaldi
显示剩余2条评论

5

对于那些在 Android 6.0+ 上测试应用的人,请确保您已经实施了运行时权限,因为仅在您的 AndroidManifest 文件中添加简单的权限是不够的。


无法相信这个回答的赞数比另一个少。这可能是解决方案,对我有用... - Vijay Kumar Kanta
好的,第一个答案是在还没有运行时权限这种东西的时候。无论如何,很高兴能够帮到你 :) - Elisey Rodriguez Moraga

1

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

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

  2. 点击“编辑”按钮 Click on edit button

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

  4. 在条目旁边的下拉菜单中,选择“webcam0”或与您想要使用的相机对应的相机 Select the camera you want to use

  5. 停止AVD并重新启动。


0
如果您在API 22及以上版本上构建应用程序,可能需要请求权限。

你好,欢迎来到 Stack Overflow!请阅读 新手导航,以及 如何撰写优质的回答。尽可能详细地阐述你的回答,让它更加清晰明了,并包含更多细节。 - Tomer Shetah

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