【发布时间】:2018-02-01 13:04:44
【问题描述】:
我正在尝试显示特定文件夹中的音频文件。文件夹由用户选择并添加到arraylist,因此arraylist 是动态的。现在,当我查询多个文件夹时, mediaStore 不会返回任何结果。我认为问题出在我的selection 上。我知道selectionArgs 中的项目数应该与选择中的? 匹配,所以我创建了一个可以做到这一点的函数,但没有运气。希望你们能帮助我。谢谢!
下面是代码:
String[] whereVal;
String selection;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] folderPaths = storage.loadFolderPaths().toArray(new String[storage.loadFolderPaths().size()]);
selection = MediaStore.Audio.Media.DATA +" IN (" + makePlaceholders(folderPaths.length) + ")" ;
whereVal = folderPaths;
String[] projection = {MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ALBUM_ID};
Cursor cursor = getActivity().getContentResolver().query(uri, projection, selection, whereVal, null);
private String makePlaceholders(int len) {
StringBuilder sb = new StringBuilder(len * 2 - 1);
sb.append("?");
for (int i = 1; i < len; i++)
sb.append(",?");
Log.e("len: ", String.valueOf(len));
Log.e("Selection: ",sb.toString());
return sb.toString();
}
【问题讨论】:
-
MediaStore.Audio.Media.DATA 包含曲目的完整路径,因此您的标准永远不会正确。如果您可以在最后一个 / 之后剥离,则剥离轨道并可能使用 LIKE 运算符。
标签: android mysql sqlite android-mediaplayer mediastore