【问题标题】:Multiple selectionArgs - query to mediaStoreMultiple selectionArgs - 查询 mediaStore
【发布时间】: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


【解决方案1】:

除了我的评论:

            // strip trackname
    path = path.substring(path.lastIndexOf("/")+1,path.length());
    String where = MediaStore.Audio.Media.DATA + " LIKE " + "\'%" +path+"%\'";

【讨论】:

  • 感谢 Theo 的回答,但我确实想通了 ;)
  • 为了帮助别人,你能发布你的解决方案吗?
猜你喜欢
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多