Android6.0以降でZxingを使ったときにはまったこと
AndroidでQRを読み取るプログラムを書いているのですが、そこでちょっとした落とし穴にはまったので、忘れないように書いておきます。
ここでは、起動と同時にカメラが起動させ、QRコードにかざすと自動的に読み取り、HelloWorldと表示された画面に遷移する単純なプログラムを書きます。
1.環境
・ Android6.0.1 (Huwei P9 Lite)
・ Android Studio 2.33
2.Zxingとは
Androidなどで、QRコードやバーコードを読み取ったり、生成したりするプログラムを作るときに便利なライブラリです。
3.Zxingの導入
Zxingの導入は、build.gradleにコードを記述することで、簡単にできます。
(Module: app) と書いてあるほうに以下の2行のコードを記述します。
..........省略.......... dependencies { ..........省略.......... compile 'com.journeyapps:zxing-android-embedded:3.0.0@aar' compile 'com.google.zxing:core:3.3.0' }
4.カメラのパーミッションの許可
Androidアプリで、QRコードを読み取るときなど、カメラを使う時は、カメラに対する使用許可を与えなければなりません。
AndroidManifest.xmlというファイルに以下の1行を書き加えます。
<uses-permission android:name="android.permission.CAMERA" />
5.MainActivity.javaの編集
メインアクティビティのonCreateメソッドを以下のように変更します。
..........省略.......... @Override protected void onCreate(Bundle savedInstanceState) { ..........省略.......... new IntentIntegrator(this).initiateScan(); } ..........省略..........
6.いざ、実行!
できたので、実行します。が、しかし…
「Androidのカメラに問題が発生しました。デバイスを再起動する必要があります」とエラーが出ます。
もちろん、再起動して直るわけでもありませんし、実機で試しても同じです。
7.解決方法
Android6.0からは、スマートフォン本体から個別にアプリケーションに対するカメラのアクセス許可を与えなければ動きません。
そこで、スマートフォン本体から、
「設定」→「アプリ」→「開発したアプリ名」→「権限」→「カメラ」を押すことで
このアプリケーションに対するカメラのアクセス許可が出ます。
この設定をした後、実行すると正常に動きます!
その他、読み取り結果を取得するなどの処理は、以下の参考ページをご覧ください。
参考ページ
iinpht.jeez.jp