たまには技術系のエントリを書いてみます。
今開発しているアプリで 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 件のコメント:
コメントを投稿