2022 May 08.
2022 Apr. 30.
端末
参考
android開発 ContentResolver 音声メディア・動画メディアへのクエリによるメディア情報取得 - rokkonet
概要
ContentResolverのprojectionに"_data"をセットしてメディアファイルをクエリーし、"_data"から取得したディレクトリで取捨選択する。
("_data"にファイルパスが入っている)
外部ストレージ共有領域内のディレクトリの取得
android開発 deprecatedなメソッドを使わずに外部ストレージ共有領域のパスを取得するにはファイルピッカーを使うしかないと思われる - rokkonet
サンプル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" ) // 1分間以上のAudioを指定する val selection = "${MediaStore.Audio.Media.DURATION} >= ?" val selectionArgs = arrayOf( TimeUnit.MILLISECONDS.convert(1, TimeUnit.MINUTES).toString() ) val resolver = applicationContext.contentResolver val query = resolver.query( collection, //データの種類 projection, //取得する項目 nullは全部 selection, //フィルター条件 nullはフィルタリング無し selectionArgs, //フィルター用のパラメータ null //並べ替え。nullは並べ替えしない ) query?.use { cursor -> val pathColumn = cursor.getColumnIndexOrThrow("_data") while (cursor.moveToNext()) { val pathOfUri = cursor.getString(pathColumn) // ここで、pathOfUriの文字列を調べてメディアファイルを取捨選択する } } query?.close()