Android 尝试启动手电筒时获取NullpointerException

Android 尝试启动手电筒时获取NullpointerException,android,camera,flashlight,Android,Camera,Flashlight,我正在做一个程序,你可以在手机上启动手电筒。 我找了很多,也得到了同样的答案。但当我尝试做同样的事情时,我会得到一个nullpointerException 所以我的XML看起来像 ` 我已经声明了Camera; 可绘制的手机图像 在onCreate之上 当我按下“强光”按钮时,我在Parameters params=camera.getParameters()处得到一个nullpointerException 那么我能做些什么来解决这个问题呢?我做错了什么 谢谢这意味着Camera.open(

我正在做一个程序,你可以在手机上启动手电筒。 我找了很多,也得到了同样的答案。但当我尝试做同样的事情时,我会得到一个nullpointerException

所以我的XML看起来像 `

我已经声明了
Camera;
可绘制的手机图像
在onCreate之上

当我按下“强光”按钮时,我在
Parameters params=camera.getParameters()处得到一个nullpointerException

那么我能做些什么来解决这个问题呢?我做错了什么


谢谢

这意味着
Camera.open()
返回空值。分配相机变量后,必须检查null:

camera = Camera.open();
if ( camera == null )
    return;
...

出现此错误是因为对
Camera.open()
的调用返回
null
。当设备没有背面摄像头时,会发生这种情况,如的文档中所述

创建新的摄影机对象以访问设备上的第一个后向摄影机。如果设备没有背面摄像头,则返回null

但是,您可以使用以下方法解决此问题:

 camera = Camera.open(int);
其中int是由返回的摄影机ID。您可以使用从其ID中查找相机的详细信息

但是,在大多数情况下,您可以使用摄像头ID 0访问前摄像头:

 camera = Camera.open(0);
此外,如果设备没有背面摄像头,则不太可能安装闪光灯

您可以使用以下方法检查闪存的可用性:

boolean hasFlashLight = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

您在哪个设备上进行测试?确实返回null,但执行检查并不能解决问题-为什么为null。从docs for open()-“创建一个新的摄影机对象以访问设备上的第一个背向摄影机。如果设备没有背向摄影机,则返回null。”他很可能没有背向摄像头,因为设备没有后置摄像头:啊,谢谢,我会调查的。现在我想起来了,我很确定这里的情况就是这样。。谢谢
 camera = Camera.open(0);
boolean hasFlashLight = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);