2022 Jul. 18.
2022 May 02.
2022 Jan. 30.
参考ページ
共有ストレージからメディア ファイルにアクセスする | Android デベロッパー | Android Developers
ContentResolverでソート・絞り込み検索の条件を追加する方法|Androidアプリ開発のあれこれ
ContentResolver#queryの第3引数に絞り込み条件を指定し、第4引数に絞り込み条件の引数を指定する
import java.util.concurrent.TimeUnit fun GetAudioFile() { // queryの引数の設定 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 columns = arrayOf( MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.SIZE, "_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, //データの種類 columns, //取得する項目 nullは全部 selection, //フィルター条件 nullはフィルタリング無し selectionArgs, //フィルター用のパラメータ null //並べ替え ) query?.use { cursor -> val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID) val displayNameColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME) val sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE) val column_index = cursor.getColumnIndexOrThrow("_data") cursor.moveToPosition(getRandomNum(numCount!!)) val id = cursor.getLong(idColumn) val displayName = cursor.getString(displayNameColumn) val mediaSize = cursor.getInt(sizeColumn) val contentUri: Uri = ContentUris.withAppendedId( MediaStore.Video.Media.EXTERNAL_CONTENT_URI,id) val pathOfUri = cursor.getString(column_index) val audioIntent = Intent() audioIntent.action = Intent.ACTION_VIEW audioIntent.setDataAndType(Uri.parse(pathOfUri), "audio/*") // audioIntent.setDataAndType(contentUri, "audio/*") <- NG startActivity(audioIntent) /* Log.d( "MyApp", "id: $id, name: $displayName, ${mediaSize}Byte, uri: $contentUri" ) */ // Log.d("MyApp", "Selected " + pathOfUri!!) } query?.close() }