我正在尝试获取播放列表的列表以及在安装了 Android 10 的设备上每个播放列表中有多少个大头钉。我正在使用 compileSdkVersion = targetSdkVersion = 30。我正在请求 READ_EXTERNAL_STORAGE,这似乎是必要的。
我以前从未尝试过,但这似乎很简单:获取播放列表的光标并使用该播放列表的 _id,然后将光标置于曲目上。
就获取名称和数据(位置)而言,它按预期工作,但它始终为 _id 返回 1,并且找不到任何轨道(即 cursor.getcount() 为零)。文件不为空。我可能有一个愚蠢的错误,但我没有看到。
2021 年 7 月 22 日添加:只有 5 个列名返回 *:date_modified、_id、name、_data、date_ added。除了 _id 之外的所有值都是正确的(或至少是合理的)。 _id (MediaStore.Audio.Playlists._ID) 始终为 1。
这是代码:
private void showPlaylists() {
StringBuilder sb = new StringBuilder();
sb.append("\nPlaylists\n");
Uri collection;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
collection = MediaStore.Audio.Playlists.getcontenturi(MediaStore.VOLUME_EXTERNAL);
} else {
collection = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
}
String name,data;
long id;
// External
try (Cursor playListCursor =
this.getcontentResolver().query(
collection,null,null)) {
if (playListCursor == null) {
sb.append("Cannot access external playlists\n");
return;
}
for (int i = 0; i < playListCursor.getcount(); i++) {
playListCursor.moveToPosition(i);
name = playListCursor.getString(
playListCursor.getcolumnIndex("name"));
sb.append(i).append(" ").append(name).append("\n");
// This is apparently the path
data = playListCursor.getString(
playListCursor.getcolumnIndex(MediaStore.Audio.Media.DATA));
sb.append(" ").append(data).append("\n");
id = playListCursor.getcolumnIndex(MediaStore.Audio.Playlists._ID);
sb.append(" id=").append(id).append("\n");
// Get the playlist from the id
String[] projection = null; // All columns
try (Cursor cursor =
this.getcontentResolver().query(MediaStore
.Audio.Playlists.Members.getcontenturi
("external",id),projection,null)) {
if (cursor == null) {
sb.append(" Cannot get contents\n");
} else {
sb.append(" Tracks: ").append(cursor.getcount())
.append("\n");
}
} catch (Exception ex) {
String msg = " Error getting playlist " + i;
Log.e(TAG,msg,ex);
}
}
} catch (Exception ex) {
String msg = "Error getting external playlists";
Utils.excMsg(this,ex);
Log.e(TAG,ex);
}
Log.e(TAG,sb.toString());
}
这是Logcat中的输出:
0 Carmen Cavallero
/storage/3535-6434/Playlists/Carmen Cavallero.m3u
id=1
Tracks: 0
1 Chris Botti
/storage/3535-6434/Playlists/Chris Botti.m3u
id=1
Tracks: 0
2 Diana Krall
/storage/3535-6434/Playlists/Diana Krall.m3u
id=1
Tracks: 0
3 Dinner Party
/storage/3535-6434/Playlists/Dinner Party.m3u
id=1
Tracks: 0
4 Meditation 1
/storage/3535-6434/Playlists/Meditation 1.m3u
id=1
Tracks: 0
5 Romance
/storage/3535-6434/Playlists/Romance.m3u
id=1
Tracks: 0
6 Tablet
/storage/3535-6434/Playlists/Tablet.m3u
id=1
Tracks: 0
7 Jean Sidwell
/storage/3535-6434/Playlists/Jean Sidwell.m3u
id=1
Tracks: 0
8 Bill Evans MM2
/storage/3535-6434/Playlists/Bill Evans MM2.m3u
id=1
Tracks: 0
9 Selena
/storage/3535-6434/Playlists/Selena.m3u
id=1
Tracks: 0