rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

android開発 ContentResolver URIそのものの取得

2022 May 02.
2022 May 01.

端末

android 11 ( APIレベル 30 )

概要

ContentResolverにてIDを取得し、ContentUris.withAppendedId()でIDからURIを取得する

手順
  • ContentResolverのqueryのprojectionに"MediaStore.Audio.Media._ID"をセットする
  • query結果集合にて getColumnIndexOrThrow(MediaStore.Audio.Media._ID) でID列を取得する(取得列をidColumnとする)
  • 対象URIに対し、getLong(idColumn) でidを取得する
  • ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id) でURIを取得する

    URIファイルシステム上のパスを取得するサンプルkotlinコード
            val collection =
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                    MediaStore.Audio.Media.getContentUri(
                        MediaStore.VOLUME_EXTERNAL
                    )
                } else {
                    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
                }

            val projection = arrayOf(
                MediaStore.Audio.Media._ID,
                "_data"
            )

            val resolver = applicationContext.contentResolver
            val query = resolver.query(
                collection,  //データの種類
                projection, //取得する項目 nullは全部
                selection, //フィルター条件 nullはフィルタリング無し
                selectionArgs, //フィルター用のパラメータ
                null   //並べ替え。nullは並べ替えしない
            )

            query?.use { cursor ->
                val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)
                val pathColumn = cursor.getColumnIndexOrThrow("_data")

                while (cursor.moveToNext()) {
                    val id = cursor.getLong(idColumn)
                    var queriedUri = ContentUris.withAppendedId(
                        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id
                    )
                    val pathOfUri = cursor.getString(pathColumn)
                }
            }
            query?.close()