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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

Kotlin

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

Q&A

解決済

1回答

1013閲覧

【Android Studio】標準カメラとの連携、カメラ機能の利用

kynsk

総合スコア2

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2023/10/19 11:53

編集2023/10/20 04:40

実現したいこと

  • AndroidStudioにて端末標準カメラとの連携をする

前提

Androidアプリ開発の教科書 という書籍にて十五章のカメラアプリの実装をそのまま行ってもエラーになってしまっている
https://books.google.co.jp/books?id=xTCwEAAAQBAJ&lpg=PA390&ots=Xam-ZKS4As&dq=_cameraLauncher&hl=ja&pg=PA395#v=onepage&q=_cameraLauncher&f=true
書籍はここから見ることが出来ます

発生している問題・エラーメッセージ

ソースコード41行目のgetParcelableExtraに線が引かれており、非推奨となっている
また実行後logcatではonCameraImageClickメソッドでの例外判定が出ているため
実機で起動しても起動するとアプリが落ちてしまう

logcat におけるエラー文 FATAL EXCEPTION: main Process: com.example.cameraintentsample, PID: 20500 java.lang.IllegalStateException: Could not execute method for android:onClick at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:473) at android.view.View.performClick(View.java:7463) at android.view.View.performClickInternal(View.java:7432) at android.view.View.access$3600(View.java:817) at android.view.View$PerformClick.run(View.java:28324) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:368) at android.app.ActivityThread.main(ActivityThread.java:7710) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:954) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method)

該当のソースコード

Kotlin

1package com.example.cameraintentsample 2 3import android.app.Instrumentation 4import android.content.Intent 5import android.graphics.Bitmap 6import android.os.Build 7import androidx.appcompat.app.AppCompatActivity 8import android.os.Bundle 9import android.provider.MediaStore 10import android.view.View 11import android.widget.ImageView 12import androidx.activity.result.ActivityResult 13import androidx.activity.result.ActivityResultCallback 14import androidx.activity.result.contract.ActivityResultContracts 15 16class MainActivity : AppCompatActivity() { 17 //cameraアクティビティを起動するためのランチャーオブジェクト 18 private val _cameraLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult() 19 ,ActivityResultCallbackFromCamera()) 20 override fun onCreate(savedInstanceState: Bundle?) { 21 super.onCreate(savedInstanceState) 22 setContentView(R.layout.activity_main) 23 } 24 //画像部分がタップされた時の処理メソッド 25 fun onCameraImageClick(view: View){ 26 //Intentオブジェクト 27 val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) 28 //アクティビティを起動 29 _cameraLauncher.launch(intent) 30 } 31 //Cameraアクティビティから戻ってきたときの処理が記述されたコールバッククラス 32 private inner class ActivityResultCallbackFromCamera : ActivityResultCallback<ActivityResult>{ 33 override fun onActivityResult(result: ActivityResult) { 34 //カメラアプリで撮影成功の場合 35 if(result?.resultCode == RESULT_OK){ 36 //撮影された画像のビットマップデータを取得 37 val bitmap = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){ 38 result.data?.getParcelableExtra("data",Bitmap::class.java) 39 } 40 else{ 41 result.data?.getParcelableExtra<Bitmap>("data") 42 } 43 //画像を表示する 44 val ivCamera = findViewById<ImageView>(R.id.ivCamera) 45 //撮影された画像をimageviewに設定 46 ivCamera.setImageBitmap(bitmap) 47 } 48 } 49 } 50}

xml

1<?xml version="1.0" encoding="utf-8"?> 2<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:id="@+id/ivCamera" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:layout_gravity="center" 9 android:onClick="onCameraImageClick" 10 android:scaleType="center" 11 app:srcCompat="@android:drawable/ic_menu_camera" 12 tools:ignore="SpeakableTextPresentCheck" />

Manifest

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools"> 4 5 <uses-feature android:name="android.hardware.camera.any" /> 6 <uses-permission android:name="android.permission.CAMERA" /> 7 <uses-permission android:name="android.permission.RECORD_AUDIO" /> 8 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 9 android:maxSdkVersion="33" /> 10 11 <application 12 android:allowBackup="true" 13 android:dataExtractionRules="@xml/data_extraction_rules" 14 android:fullBackupContent="@xml/backup_rules" 15 android:icon="@mipmap/ic_launcher" 16 android:label="@string/app_name" 17 android:roundIcon="@mipmap/ic_launcher_round" 18 android:supportsRtl="true" 19 android:theme="@style/Theme.CameraIntentSample" 20 tools:targetApi="31"> 21 <activity 22 android:name=".MainActivity" 23 android:exported="true"> 24 <intent-filter> 25 <action android:name="android.intent.action.MAIN" /> 26 27 <category android:name="android.intent.category.LAUNCHER" /> 28 </intent-filter> 29 </activity> 30 </application> 31 32</manifest>

試したこと

線が引かれて非推奨の部分を変えてみたりSDKバージョンを変更してみたが出来なかった
またlogcatのエラーにあるonCameraImageClickメソッドのonClickの設定忘れでもなかった

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

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

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

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

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

jimbe

2023/10/19 19:05 編集

41 行目の非推奨は、バージョンをチェックして使い分けている部分ですので、気にする必要はないと思います。 気になりましたら、 @Suppress("DEPRECATION") を付けると消せます。
jimbe

2023/10/19 19:12 編集

私の環境では、新しいプロジェクトを作って質問のコード/レイアウトを入れただけの状態でエミュレータで動作しています。 logcat に出たのはそれだけでしょうか。かなり少ないように感じますが…。 onCameraImageClick メソッドの中身を空にしたりログを出すだけにしたりしたらどうなるでしょうか。 AndroidManifest.xml はどのようになっているでしょうか。
kynsk

2023/10/20 04:43

jimbe様ありがとうございます。 logcat に出たエラー文は長すぎて載せられないとサイトのほうに注意されてしまったので初めの数行しか載せられませんでした かなり長くエラー文が吐かれていて、OnClickの箇所の例外判定をされていました Manifestコードに関しては今追記しました。カメラXの実装の時にパーミッションを追加したのでそれをそのまま追加してみたのですが、うまくいきませんでした
kynsk

2023/10/20 04:52

FATAL EXCEPTION: main Process: com.example.cameraintentsample, PID: 32426 java.lang.IllegalStateException: Could not execute method for android:onClick at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:473) at android.view.View.performClick(View.java:7463) at android.view.View.performClickInternal(View.java:7432) at android.view.View$PerformClick.run(View.java:28324) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:368) at android.app.ActivityThread.main(ActivityThread.java:7710) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:954) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:468) at android.view.View.performClick(View.java:7463)  at android.view.View.performClickInternal(View.java:7432)  at android.view.View.access$3600(View.java:817)  at android.view.View$PerformClick.run(View.java:28324)  at android.os.Handler.handleCallback(Handler.java:938)  at android.os.Handler.dispatchMessage(Handler.java:99)  at android.os.Looper.loop(Looper.java:368)  at android.app.ActivityThread.main(ActivityThread.java:7710)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit $MethodAndArgsCaller.run(RuntimeInit.java:592)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:954)  Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.sonyericsson.android.camera/.MultiWindowActivity } from ProcessRecord{b245ae1 32426:com.example.cameraintentsample/u0a370} (pid=32426, uid=10370) with revoked permission android.permission.CAMERA at android.os.Parcel.createExceptionOrNull(Parcel.java:2415) at android.os.Parcel.createException(Parcel.java:2396) at android.os.Parcel.readException(Parcel.java:2379) at android.os.Parcel.readException(Parcel.java:2321) at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3696) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1725) at android.app.Activity.startActivityForResult(Activity.java:5320) at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:780) at androidx.core.app.ActivityCompat$Api16Impl.startActivityForResult(ActivityCompat.java:809) at androidx.core.app.ActivityCompat.startActivityForResult(ActivityCompat.java:246) at androidx.activity.ComponentActivity$1.onLaunch(ComponentActivity.java:239) at androidx.activity.result.ActivityResultRegistry$2.launch(ActivityResultRegistry.java:173) at androidx.activity.result.ActivityResultLauncher.launch(ActivityResultLauncher.java:47) at com.example.cameraintentsample.MainActivity.onCameraImageClick(MainActivity.kt:29) at java.lang.reflect.Method.invoke(Native Method)  at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:468)  at android.view.View.performClick(View.java:7463)  at android.view.View.performClickInternal(View.java:7432)  at android.view.View.access$3600(View.java:817)  at android.view.View$PerformClick.run(View.java:28324)  at android.os.Handler.handleCallback(Handler.java:938)  at android.os.Handler.dispatchMessage(Handler.java:99)  at android.os.Looper.loop(Looper.java:368)  at android.app.ActivityThread.main(ActivityThread.java:7710)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:954)  Caused by: android.os.RemoteException: Remote stack trace: at com.android.server.wm.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1092) at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1003) at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:673) at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1116) at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1088) logcatエラー全文です
jimbe

2023/10/20 05:46

>カメラXの実装の時にパーミッションを追加した 恐らくそのせいでパーミッション例外が発生していると思います。 この質問のコードに限って言えば、パーミッションの設定はしないで下さい。 他にもコードがあってパーミッションの設定が必要なのでしたら、カメラの使用をユーザに許可してもらうロジックが必要です。
kynsk

2023/10/20 06:37

パーミッションの部分を削除したら無事動作しました! 色々教えていただきありがとうございました!
guest

回答1

0

Jimbe様のご協力により解決することが出来ました

投稿2023/10/20 06:39

kynsk

総合スコア2

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

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

jimbe

2023/10/20 07:42 編集

質問へのコメントに書かれた logcat がスマホだと読み難いのでとりあえず パーミッションについて書きましたが、logcat を見直しますと Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.sonyericsson.android.camera/.MultiWindowActivity } from ProcessRecord{b245ae1 32426:com.example.cameraintentsample/u0a370} (pid=32426, uid=10370) with revoked permission android.permission.CAMERA というのが入っていましたので、当たりだったようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問