2022 May 02.
2022 May 01.
端末
概要
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()