ExoPlayerを触ることに始まって、今は、UAMPを改造して様子を見ているところである。ハードコードによって、m3u8プレイリストの読み込みには対応できたのであるが、これを一括読み込みにしたいので、メディアクエリを使ってみた。
メディアクエリの構築
val projection = arrayOf(MediaStore.Audio.Playlists.NAME, MediaStore.Audio.Playlists._ID, MediaStore.Audio.Playlists.DATA) val selection = "" var selectionArgs = emptyArray<String>() val sortOrder = "" val use = applicationContext.contentResolver.query( MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, sortOrder )?.use { cursor -> while (cursor.moveToNext()) { // Use an ID column from the projection to get // a URI representing the media item itself. Log.d("", cursor.getString(0)) val contentUri: Uri = ContentUris.withAppendedId( MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, cursor.getString(1).toLong() ) Log.d("", contentUri.toString()) Log.d("", cursor.getString(2)) } }
対象をオーディオプレイリスト、取得項目リストは名前とID、取得条件やソート条件は無しにしている。これで、名前を取得し、IDからuriが取得できることになる。
実行結果
D/: fripSide-singles
content://media/external/audio/playlists/277
/storage/1612-2708/Music/Playlists/fripSide-singles.m3u8
fripSide
content://media/external/audio/playlists/278
/storage/1612-2708/Music/Playlists/fripSide.m3u8
D/: アニメタル
content://media/external/audio/playlists/544
/storage/1612-2708/Music/Playlists/アニメタル.m3u8
今回の例では、デバッグコンソールに上記のように表示された。このURIを使うように修正をかけて、様子を見るところである。
2020/9/4追記
最初はuriを取得してみたのであるが、私のプログラムの関係で、java.io.Fileを使うので、しらべたところ、上記のコードのように、MediaStore.Audio.Playlists.DATAを取得してみたところ、ファイルパスが取得できたので、こちらを使用するようにした。
まとめ
エラーが出ていたときの例外スタックフレームなどを読んでいると内部でSQLを実行しているようなので、パラメータは SQL文に近いようである。対象がプレイリストだと一覧だけが必要なので、指定するならソート順程度になるであろうか?
次の課題は、SDカードのパスの取得である。(m3u8ファイルの各行の頭につける)
コメント