我正在开发一个程序,您可以在手机中启动手电筒。 我搜索了很多,并得到了关于如何做的相同的answear。但是当我尝试做同样的事情时,我得到一个nullpointerException
所以我的XML看起来像 `
<Button
android:id="@+id/StrongFlashlight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="143dp"
android:onClick="StrongFlashlight"
android:text="@string/flashlightMax" />`
我的代码看起来像
public void StrongFlashlight(View view){
Button strongFlashlightButton = (Button)findViewById(R.id.StrongFlashlight);
camera = Camera.open();
Parameters params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_ON);
camera.setParameters(params);
camera.startPreview();
newPhoneImage = getResources().getDrawable(R.drawable.flashlight_on);
imageView.setImageDrawable(newPhoneImage);
strongFlashlightButton.setText("Strong Light");
}
我宣布Camera camera;
Drawable newPhoneImage;
在onCreate之上。
当我按下“强光”按钮时,我在Parameters params = camera.getParameters();
那么我该怎么做才能解决这个问题呢?我做错了什么?
谢谢
答案 0 :(得分:2)
这意味着Camera.open()
返回null。分配完相机变量后,您必须检查空值:
camera = Camera.open();
if ( camera == null )
return;
...
答案 1 :(得分:1)
您收到此错误是因为您对Camera.open()
的调用返回null
。当设备没有后置摄像头时会发生这种情况,如Camera.open()的文档中所述。
创建一个新的Camera对象以访问设备上的第一个后置摄像头。如果设备没有后置摄像头,则返回null。
但是,您可以使用以下方法解决此问题:
camera = Camera.open(int);
其中int是getNumberOfCameras()返回的摄像机ID。您可以使用getCameraInfo()从其ID中找到相机的详细信息。
但是,在大多数情况下,您可以使用摄像机ID 0:
访问前置摄像头 camera = Camera.open(0);
此外,如果设备没有后置摄像头,则不太可能安装闪光灯。
您可以使用以下方法检查闪光灯的可用性:
boolean hasFlashLight = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);