質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

5268閲覧

【Android】QRコードを読み取るとアプリが落ちる【Kotlin】

mgr

総合スコア1

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/07/17 08:03

編集2020/07/21 00:20

前提・実現したいこと

Android StudioでQRコードの認識システムアプリを作っているのですが、コードを読み取った直後にアプリケーションが終了してしまいます。
特に目立ったエラーメッセージも表示されておらず、原因の検討がつかなくて頭を悩ませています。
以下のようなコードで実装しています。言語はKotlinを使用しています。

該当のソースコード

class MainActivity : AppCompatActivity() { private var qrScanIntegrator: IntentIntegrator? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) qrScanIntegrator = IntentIntegrator(this) // 画面の回転をさせない (今回は縦画面に固定) qrScanIntegrator?.setOrientationLocked(false) // QR 読み取り後にビープ音がなるのを止める qrScanIntegrator?.setBeepEnabled(false) // スキャン開始 (QR アクティビティ生成) qrScanIntegrator?.initiateScan() } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { // 結果の取得 val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data) if (result != null) { // result.contents で取得した値を参照できる Toast.makeText(applicationContext, result.contents, Toast.LENGTH_LONG).show() } else { super.onActivityResult(requestCode, resultCode, data) } } }
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 30 buildToolsVersion "30.0.0" defaultConfig { applicationId "com.websarva.wings.android.qr_ja1" minSdkVersion 26 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.0' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation 'com.journeyapps:zxing-android-embedded:4.0.2' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'com.google.zxing:core:3.4.0' }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.websarva.wings.android.qr_ja1"> <application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:hardwareAccelerated="true"> <activity android:name="com.journeyapps.barcodescanner.CaptureActivity" android:screenOrientation="fullSensor" tools:replace="screenOrientation" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

試したこと

gladleのターゲット情報を変更しましたが、特に変わりありませんでした。

補足情報(FW/ツールのバージョンなど)

こちらのHPの情報を利用しました。
https://qiita.com/Toya-Onodera/items/7311e03917dea78f67ee

使用機器はHUAWEI MediaPad T5
AndroidのバージョンはOreo(26)です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keicha_hrs

2020/07/17 13:11 編集

試しに作成してみましたが、QRコードを読み込むとカメラ撮影画面が閉じて白地のActivityの画面に移行し、Toastに読み込んだ情報が表示されています。これが正常動作なのかわかりませんが、この「カメラ撮影画面が閉じる」ことを「アプリが終了する」と言われているのですか?
keicha_hrs

2020/07/17 13:10

閉じたり閉じなかったり、なんか不安定だな・・・
mgr

2020/07/20 00:45

カメラ撮影画面が閉じる=アプリが終了するとは認識していません。keicha_hrsさんが行われた「QRコードを読み込むとカメラ撮影画面が閉じて白地のActivity画面に移行、Toastに読み込んだ情報が表示される」という流れが本来の動作処理なのですが、私の場合は何故かそうならないのです。
keicha_hrs

2020/07/20 10:30

私は基本的には参考ページ通りに作成しましたが、MainActivityについては質問で示されたコード通りにしました。それでこちらでは動作しています。このアプリを動くようにするためには、build.gradleやAndroidManifest.xmlの編集も必要になりますが、それらをどのようにされたのか質問文に提示されていないので、この状況説明では原因の推測はできません。また、動作検証に使われた端末が何なのか、そのAndroidバージョンはいくつなのかといった情報も欠けています。
mgr

2020/07/21 00:23

申し訳ありません。質問文について追記を行いました。
guest

回答1

0

ベストアンサー

情報補足ありがとうございます。

AndroidManifest.xmlについて、

xml

1 <activity android:name=".MainActivity"> 2 <intent-filter> 3 <action android:name="android.intent.action.MAIN" /> 4 5 <category android:name="android.intent.category.LAUNCHER" /> 6 </intent-filter> 7 </activity> 8 <activity 9 android:name="com.journeyapps.barcodescanner.CaptureActivity" 10 android:screenOrientation="fullSensor" 11 tools:replace="screenOrientation" /> 12

のようにMainActivityの宣言は残した上で、CaptureActivityを追加する必要があるのではないでしょうか。MainActivityからCaptureActivityを呼び出して、QRコードを読み取った後、MainActivityに戻ってonActivityResult()が呼び出され、結果がToastで出力されるという流れになります。

質問の記述の仕方だと、いきなりCaptureActivityから実行開始され、QRコードを読み取ったらそのまま自身を閉じるわけですが、移行先がありませんからそれで「正常終了」です。落ちているわけではなく、それがそのManifestによる「正常動作」ということになるでしょう。

投稿2020/07/21 07:48

編集2020/07/21 13:14
keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mgr

2020/07/22 06:15

ご回答ありがとうございました。無事に実機での動作を確認できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問