2016-11-05 16 views
0

私はデバイスの懐中電灯をオン/オフする簡単なボタンを作ろうとしています。私はなぜandroid.hardware.cameraが時代遅れなのか理解できません。私のコードをすべてのデバイスで動作させるために、また、より古いバージョンのAndroidで動作させるためには、どうすればよいですか?Android Nでデバイスの懐中電灯を開くには?

これは私のコードです:

if (IsFlashlightOn) 
{ 
    if (getPackageManager().hasSystemFeature(
     PackageManager.FEATURE_CAMERA_FLASH)) 
    { 
    cam = Camera.open(); 
    Camera.Parameters p = cam.getParameters(); 
    p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
    cam.setParameters(p); 
    cam.startPreview(); 
    } 
    else 
    { 
    try 
    { 
     cam.stopPreview(); 
     cam.release(); 
     cam = null; 
    } 
    catch (Exception ex) 
    { 
     // Ignore the exception 
    } 
    } 
} 
+0

このコードは機能しますか?特定のAndroidバージョンを搭載した端末で実行する際に問題がありますか?どれ?あなたはアンドロイドNについて尋ねた件名と、以前のAndroidバージョンについて言及したメッセージの中で紛らわしいものがありました。 –

+0

私はSamsung Galaxy S5を持っています。私はデバイスの懐中電灯を点灯させることができますが、電源を切ることはできません。私のコードには、Cameraオブジェクトが廃止され、何をすべきか分からないことを示す行があります。 –

+0

さて、あなたの問題を理解しました。私は以下の定期的な回答を投稿しました。あなたはそれをチェックすることができます。私はそれが助けてくれることを願う –

答えて

1

あなたのコードのロジックに誤りがあります。特定の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をチェックアウトスレッド:

あなたの問題に対処しながら、彼らは役に立つかもしれません。

よろしくお願いいたします。

+0

お時間を頂きありがとうございますが、Camera(Android.Hardware.Camera)というオブジェクトは廃止されました。私はすべてのすべてのデバイスとすべてのAPIで動作するコードを取得したいと考えています。 –

+0

@TalAngel私は自分の答えを改善しました。私は今、もっと役に立つと思う。 –

+0

はい、そうです。 Dzięki! –

関連する問題