2015/06/19

Android 5.0 Lollipop で LED フラッシュライトを点灯する方法

たまには技術系のエントリを書いてみます。

今開発しているアプリで LED フラッシュライトを点灯する機能があるのですが、Android 4.4 KitKat から 5.0 Lollipop にアップデートしたらライトが点かなくなりました。

KitKat で動作していたコードはこちら。setFlashMode(FLASH_MODE_TORCH) して startPreview() するだけで動作していました。

        Camera cam = Camera.open();
        Parameters p = cam.getParameters();
        p.setFlashMode(FLASH_MODE_TORCH);
        cam.setParameters(p);
        cam.startPreview();


「LED flash lollipop」等で検索してみると stackoverflow に同じ症状で困っている方がいました。

        How to turn on FlashLight in Lollipop programmatically Android

こちらから解決策を拝借。青字の部分が追加になりました。startPreview() する前に、setPreviewTexture() する必要があるみたいです。

        Camera cam = Camera.open();
        Parameters p = cam.getParameters();
        p.setFlashMode(FLASH_MODE_TORCH);
        cam.setParameters(p);

        SurfaceTexture preview = new SurfaceTexture(0);
        try {
            cam.setPreviewTexture(preview);
        } catch (IOException ex) {
            // Do nothing
        }


        cam.startPreview();


上記のコードは KitKat 以前でも問題なく動作するようですが、無駄なことは極力さけたいのでバージョンチェックを入れてみます。

        Camera cam = Camera.open();
        Parameters p = cam.getParameters();
        p.setFlashMode(FLASH_MODE_TORCH);
        cam.setParameters(p);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            SurfaceTexture preview = new SurfaceTexture(0);
            try {
                cam.setPreviewTexture(preview);
            } catch (IOException ex) {
                // Do nothing
            }
        }

        cam.startPreview();


これで Lollipop で LED フラッシュライトを点灯することができるようになりました。

0 件のコメント:

コメントを投稿