-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の上で宣言しました。

「強い光」のボタンを押すと、nullpointerException が発生しますParameters 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からカメラの詳細を見つけることができます。

ただし、ほとんどの場合、カメラID0でフロントカメラにアクセスできます。

 camera = Camera.open(0);

さらに、デバイスに背面カメラがない場合、フラッシュライトが取り付けられている可能性はほとんどありません。

フラッシュの可用性は、次を使用して確認できます。

boolean hasFlashLight = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
于 2012-12-04T18:21:14.013 に答える