[Android] zxingでQRコードを読み取る時に画面が横回転しないようにする
画面が横になる・・・
AndroidでQRコードを読み取るとき,zxing-android-embedded
というライブラリを使うことがあるかと思います.
しかし問題なのが,もともとバーコード用のライブラリのためリファレンス通りの使い方ではカメラが横回転(ランドスケープモード)してしまいます.QRコードだけなら,縦のまま読み取りたいですね.
一見Activityのandroid:screenOrientation
をportrait
にするだけかと思いきや,裏で別のActivityを呼び出しているようで,これだけでは治りません.ということで,縦にしましょう.
たぶん2分くらいで終わります.
依存関係
gradleに書いてない方は,書いてから始めましょう.
dependencies {
...
implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
}
CaptureActivityを継承したActivityをつくる
zxingを導入すると,com.journeyapps.barcodescanner.CaptureActivity
たるActivityが存在することがわかります.IntentIntegrator
の中を見ていると,このCaptureActivity
がどうやらデフォルトで使用されているようです.ということで,これを継承したActivityを宣言しましょう.中身は空で構いません.
適当に好きなファイルに宣言してもいいですし,新しくこれ専用のファイルを作ってあげてもいいです.
class MyCaptureActivity : CaptureActivity()
AndroidManifestを編集する
新しくActivityを作ったので,manifestファイルに記述します.
android:name
以外は記述しなくても縦画面になりましたが,一応書いておくと安心ですね.
<application>
...
<activity
android:name=".MyCaptureActivity"
android:screenOrientation="portrait"
android:stateNotNeeded="true"
android:theme="@style/zxing_CaptureTheme"
android:windowSoftInputMode="stateAlwaysHidden">
</activity>
</application>
IntentIntegratorのcaptureActivityにセットする
最後に適用して終わりです.
QRコードカメラのintentを発行するときはIntentIntegrator
を使うと思いますが,生成したインスタンスのcaptureActivity
に先ほど宣言したクラスを割り当ててあげれば,画面が縦になります.
Activityから呼び出す場合とFragmentから呼び出す場合で,若干書き方が違います.
- Activityの場合
val intentIntegrator = IntentIntegrator(this).apply {
setPrompt("Scan a QR code")
captureActivity = MyCaptureActivity::class.java
}
intentIntegrator.initiateScan()
- Fragmentの場合
val intentIntegrator = IntentIntegrator.forSupportFragment(this).apply {
setPrompt("Scan a QR code")
captureActivity = MyCaptureActivity::class.java
}
intentIntegrator.initiateScan()
結果
こうだったのが
こうなりました!
おわりに
けっこう過去に議論されていた問題みたいで,公式レポジトリのIssueやStackOverflowには情報がありましたが,日本語にはなっていないみたいですね.
以上です,ありがとうございました.
Author And Source
この問題について([Android] zxingでQRコードを読み取る時に画面が横回転しないようにする), 我々は、より多くの情報をここで見つけました https://qiita.com/tktktks10/items/3b327b2900d38e672996著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .