-1

我正在开发一个程序,您可以在其中启动手机中的手电筒。我已经搜索了很多,并且对如何做得到了相同的答案。但是当我尝试做同样的事情时,我得到了一个 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 上面声明了。

当我按下“强光”按钮时,我得到一个 nullpointerExceptionParameters params = camera.getParameters();

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

谢谢

4

2 回答 2

2

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

camera = Camera.open();
if ( camera == null )
    return;
...
于 2012-12-04T18:04:58.120 回答
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);
于 2012-12-04T18:21:14.013 回答