查询MediaStore会得到看似不匹配的结果

时间:2011-02-17 05:16:43

标签: android

我是Android开发的新手,我一直致力于自定义音乐播放器供我自己使用。经过相当多的搜索,我终于找到了一些可用于在MediaStore中搜索音乐文件的代码。这是我正在使用的代码。

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

StringBuilder where = new StringBuilder();
where.append(MediaStore.Audio.Media.TITLE + " != ''");

// Add in the filtering constraints
String [] keywords = null;
if (query != null) {
    String [] searchWords = query.split(" ");
    keywords = new String[searchWords.length];
    Collator col = Collator.getInstance();
    col.setStrength(Collator.IDENTICAL);

    for (int i = 0; i < searchWords.length; i++) {
        keywords[i] = '%' + MediaStore.Audio.keyFor(searchWords[i]) + '%';
    }


    for (int i = 0; i < searchWords.length; i++) {
        where.append(" AND ");
        where.append(MediaStore.Audio.Media.ARTIST_KEY + "||");
        where.append(MediaStore.Audio.Media.TITLE_KEY + " LIKE ?");
    }
}

String selection = where.toString();

String[] projection = {
        BaseColumns._ID,   
        MediaStore.Audio.Media.MIME_TYPE, 
        MediaStore.Audio.Artists.ARTIST,
        MediaStore.Audio.Albums.ALBUM,
        MediaStore.Audio.Media.TITLE
};


Cursor cursor = this.managedQuery(
        uri,
        projection,
        selection,
        keywords,
        MediaStore.Audio.Media.TITLE);

如果我搜索“拉雷多”,我希望它能再次出现在Johnny Cash的“拉雷多街道”中。它包含在结果中,但是还有几十首其他的歌曲似乎与我的查询完全不符。

内置音乐播放器似乎在做同样的事情,尽管它会返回更多无关的匹配。这是预期的行为吗?如果是,我可以添加一些额外的代码来过滤我的列表到完全匹配。如果不是,我做错了什么?

1 个答案:

答案 0 :(得分:1)

有点远景,但尝试用括号括起你的WHERE语句以便它读取 where(title!='')AND(艺术家||标题如?AND artist || title like?...)

我很好奇逻辑是否正在发生,因为它读取“where title!=(''AND artist || title =?...),如果它甚至被解析,它将返回一些时髦的结果。

那就是说,如果你看到内置音乐播放器出现了奇怪的结果,你正在测试哪个设备/平台版本?