Androidで、カメラ用のLEDフラッシュライトを懐中電灯として使う。
よくある機能でアプリもたくさん公開されていますが、なぜかインターネット接続のパーミッションを要求してくるものなどが多く、どれが安全なアプリかよく分からなかったため、「簡単な機能だし、悩むくらいなら作ってしまえ」と作ってみたところ、ちょっとハマってしまったので解決方法をメモしておきます。
まずは
[Android] 端末のLEDライトを制御する
http://aba.doorblog.jp/archives/6496611.html
を参考に
Manifest ;
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.flash" />
Source Code ;
Camera c = Camera.open();
Camera.Parameters cp = c.getParameters();
cp.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
c.setParameters(cp);
c.startPreview();
としたところ、Nexus4 (Android 4.3ベースAOKPカスタムロム)ではライトが点灯しましたが、肝心のメイン端末であるNexus5 (Android 4.4.2 Stock ROM / Runtime = ART)ではライトが付きませんでした。
調べてみると、カメラ・ライト周りの機能は端末ごとの差異が大きく、原因を特定しづらい問題が多いため、アプリ開発者としてはかなり困っている領域とのこと。この件についても、Nexus5とは別の端末の問題としていくつか質問や回答が見つかりました。
その中で
http://stackoverflow.com/questions/9505945/led-flashlight-does-not-work-on-samsung-galaxy-nexus
の回答者1 (Rahat Ahmedさん)の回答を元に
Camera c = Camera.open();
Camera.Parameters cp = c.getParameters();
cp.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
c.setParameters(cp);
try {
c.setPreviewTexture(new SurfaceTexture(0));
} catch (IOException e) {
}
c.startPreview();
としたところ、無事、上記環境のNexus5でライトが付きました。
こんにちは。
返信削除Nexus 5で同じことをしようとして嵌ってましたが、こちらの記事の通りにしたところLEDが付くようになりました。
LEDの制御って機種ごとの違いがあるみたいで難しいんですね。
ありがとうございました。
>ライちゃん
返信削除コメントありがとうございます。
お役に立てたようでとても嬉しいです!
わたしも広告なしの懐中電灯アプリが欲しかったのでこちらの情報でアプリ化しました。助かりました。http://blog.kassyi.com/2014/05/nexus-5.html
返信削除> kassyiさん
削除コメントありがとうございます。
Androidはこういう機能を自作できるので楽しいですよね。