前提
kotlinを使用してフォルダの選択機能を持つアプリを作成しています。
ActivityResultContracts.OpenDocumentTree を使用することでAndroid10までは実現できたのですが、Android11以降はDownloadフォルダが選択することができなくなってしまいました。
Androidの仕様が変わったためだということは理解しています。
実現したいこと
・Downloadフォルダを含めた、任意のフォルダを選択したい
該当のソースコード
private var onSelectFolderButtonClickListener = View.OnClickListener { folderLauncher.launch(null) } private val folderLauncher = registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { if (it == null) return@registerForActivityResult val context = this@Activity // URIの永続的パーミッションを取得 val takeFlags: Int = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION context.contentResolver.takePersistableUriPermission(it, takeFlags) . . . }
該当のソースコード2
private var onSelectFolderButtonClickListener = View.OnClickListener { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE) startActivityForResult(intent, REQUEST_CODE) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) { val uri = data?.data ?: return contentResolver.takePersistableUriPermission( uri, Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION ) } . . . }
試したこと
・MANAGE_EXTERNAL_STORAGEを取得して確認しましたが変わりませんでした。
上記の手法に拘らず、Android11以降でフォルダを選択する方法(関数、ライブラリ等)をご教示いただきたく、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー