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ファイルの各行の頭につける)

コメント