あなたのコードのロジックに誤りがあります。特定のAndroidバージョンとは関係ありません。デバイスにカメラの懐中電灯があるかどうかを確認してから、オンにします。 else
ブロックでは、デバイスにカメラの懐中電灯がない場合にカメラの懐中電灯をオフにしていますデバイスに実際に懐中電灯がある場合は、何も起こらないでしょう。
コードは以下のように表示されるはずです。それは懐中電灯をトグルします(電源を切るとオンにし、オンにするとオフにします)。
boolean isFlashlightOn = false;
boolean deviceHasCameraFlash = getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA_FLASH);
if(deviceHasCameraFlash) {
Camera camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
if(isFlashlightOn) {
// turn the flashlight off
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
isFlashlightOn = false;
} else {
// turn the flashlight on
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
isFlashlightOn = true;
}
}
あなたは今、一般的なアイデアを得るし、あなたの目的にそれを調整する必要があり、私は今、このコードをテストすることができませんでしたが、私はそれが動作するはずだと思います。
IDEおよび静的コード解析ツールで警告が表示されないようにするには、廃止予定のコードに@SuppressWarnings("deprecation")
アノテーションを追加する必要があります。以前のAndroidバージョンとの下位互換性を保つためには、それを維持する必要があります。
新しいAndroidバージョンと古いAndroidバージョンの両方でCameraを処理する場合は、これらのバージョンの個別のコードを準備する必要があります。文書によると
:
我々は新しい アプリケーションのための新しいandroid.hardware.camera2 APIを使用することをお勧めします。
それはあなたが次のようにそれを行う必要がありますを意味し、次のようになり、新しいAPIと懐中電灯を切り替えるため
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// code for lollipop devices or newer
} else {
// code for pre-lollipop devices
}
コード:また
private void toggleFlashLight(boolean isFlashlightOn) {
CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String cameraId = camManager.getCameraIdList()[0]; // Usually front camera is at 0 position.
camManager.setTorchMode(cameraId, isFlashlightOn);
}
、これらのStackOverflowをチェックアウトスレッド:
あなたの問題に対処しながら、彼らは役に立つかもしれません。
よろしくお願いいたします。
このコードは機能しますか?特定のAndroidバージョンを搭載した端末で実行する際に問題がありますか?どれ?あなたはアンドロイドNについて尋ねた件名と、以前のAndroidバージョンについて言及したメッセージの中で紛らわしいものがありました。 –
私はSamsung Galaxy S5を持っています。私はデバイスの懐中電灯を点灯させることができますが、電源を切ることはできません。私のコードには、Cameraオブジェクトが廃止され、何をすべきか分からないことを示す行があります。 –
さて、あなたの問題を理解しました。私は以下の定期的な回答を投稿しました。あなたはそれをチェックすることができます。私はそれが助けてくれることを願う –