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

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

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

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

Kotlin

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

Q&A

1回答

718閲覧

フォルダ参照のパーミッションが表示されない

bakunew

総合スコア1

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2023/03/26 09:54

編集2023/03/27 04:32

現状

androidのエミュレータでフォルダの写真をImageViewに表示する際に、
ユーザーにフォルダ参照の許可を求めるダイアログを表示したいのですが、何度試しても表示されません。

該当のソースコード

kotlin

1 private fun openGallery() { 2 3 val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) // Android4.4以降推奨の形はIntent(Intent.ACTION_OPEN_DOCUMENT) 4 intent.type = "image/*" 5 try { 6 startActivityForResult(intent,REQUEST_GALLERY_TAKE) //取り消し線は非推奨 7 }catch (e: ActivityNotFoundException){ 8 Toast.makeText(this,"フォルダーが参照できません",Toast.LENGTH_SHORT).show() 9 } 10 } 11 override fun onActivityResult(requestCode: Int, resultCode: Int, photodata: Intent?) { 12 super.onActivityResult(requestCode, resultCode, photodata) 13 14 if (requestCode == REQUEST_GALLERY_TAKE && resultCode == Activity.RESULT_OK && photodata != null) { 15 selectedPhotoUri = photodata.data 16 Log.d("AsaznaLog","$selectedPhotoUri") 17 try { 18 selectedPhotoUri.also { selectedPhotoUri -> 19 val inputStream = contentResolver.openInputStream(selectedPhotoUri!!) 20 val image = BitmapFactory.decodeStream(inputStream) 21 binding.iv2.setImageBitmap(image) 22 } 23 } catch (e: java.lang.Exception) { 24 Log.d("AsaznaLog","画像の取得に失敗しました。") 25 } 26 } 27 } 28 29 private fun setGalleryPermission() { 30 31 when { 32 ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) 33 != PackageManager.PERMISSION_GRANTED -> { 34 35 requestPermissions( 36 arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), 37 RECORD_REQUEST_CODE 38 ) 39 } 40 ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.READ_EXTERNAL_STORAGE) -> { 41 42 Toast.makeText(this,"フォルダへのアクセスを許可する必要があります",Toast.LENGTH_SHORT) 43 } 44 else -> { 45 46 openGallery() 47 } 48 } 49 } 50 51 override fun onRequestPermissionsResult( 52 requestCode: Int, 53 permissions: Array<String>, 54 grantResults: IntArray) { 55 super.onRequestPermissionsResult(requestCode, permissions, grantResults) 56 57 when (requestCode) { 58 RECORD_REQUEST_CODE -> { 59 if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 60 Log.d("AsaznaLog", "Permit!") 61 openGallery() 62 } else { 63 Toast.makeText(this,"フォルダへのアクセスを許可する必要があります",Toast.LENGTH_LONG).show() 64 65 AlertDialog.Builder(this) 66 .setTitle("設定へ移動しますか?") 67 .setPositiveButton("はい"){dialog,_ -> 68 val intent = Intent() 69 intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS 70 val packageName = packageName 71 val uri =Uri.fromParts("package",packageName,null) 72 intent.data = uri 73 startActivity(intent) 74 } 75 .setNegativeButton("キャンセル"){dialog,which -> 76 dialog.dismiss() 77 } 78 .create().show() 79 } 80 return 81 } 82 else -> { 83 Log.d("AsaznaLog","エラー") 84 } 85 } 86 }

追記

いろいろ試したのですが、grantResults[0] == PackageManager.PERMISSION_GRANTEDが満たされず、ダイアログも表示されないという状況です。

*上記のコードに記載はありませんが、ImageView.setOnClickLIstenerでsetGalleryPermissionが呼ばれる形になっています。

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

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

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

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

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

guest

回答1

0

setGalleryPermission がどこからも呼ばれていなくて、その中で READ_EXTERNAL_STORAGE を要求するコードが実行されることがないからではないでしょうか?

投稿2023/03/26 15:04

ykws

総合スコア1236

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

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

bakunew

2023/03/27 03:25

ご回答いただきありがとうございます。 申し訳ありません。コードに記載漏れがありました。 実際はレイアウトに設定したImageView.setOnClickListenerでsetGalleryPermission()が呼ばれるようにしてあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問