尝试启动Flashlight时获取NullpointerException

时间:2012-12-04 18:03:23

标签: android camera flashlight

我正在开发一个程序,您可以在手机中启动手电筒。 我搜索了很多,并得到了关于如何做的相同的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();

得到一个nullpointerException

那么我该怎么做才能解决这个问题呢?我做错了什么?

谢谢

2 个答案:

答案 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);