Android 查询MediaStore得到的结果不';看起来不相配

Android 查询MediaStore得到的结果不';看起来不相配,android,Android,我是Android开发的新手,我一直在为自己开发一款定制的音乐播放器。经过一番搜索,我终于找到了一些可以用来在MediaStore中搜索音乐文件的代码。这是我正在使用的代码 Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; StringBuilder where = new StringBuilder(); where.append(MediaStore.Audio.Media.TITLE + " != ''"); // Add i

我是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);
uriuri=MediaStore.Audio.Media.EXTERNAL\u CONTENT\u Uri;
StringBuilder,其中=新建StringBuilder();
其中.append(MediaStore.Audio.Media.TITLE+“!=”);
//添加过滤约束
字符串[]关键字=null;
if(查询!=null){
String[]searchWords=query.split(“”);
关键词=新字符串[searchWords.length];
Collator col=Collator.getInstance();
col.setStrength(Collator.idential);
for(int i=0;i
如果我搜索“拉雷多”,我希望它只返回约翰尼·卡什的“拉雷多的街道”。结果中包括了这首歌,但有几十首其他歌曲被返回,这些歌曲似乎与我的查询完全不匹配


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

有点长,但请尝试在WHERE语句中插入括号,以便它可以读取 其中(标题!='')和(艺术家| |类似标题?和艺术家| |类似标题?…)

我很好奇,如果逻辑是这样的,它会读到“where title!=(“”和artist | | title=?…),如果它被解析,会返回一些奇怪的结果


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

有点长,但请尝试将WHERE语句插入括号,以便它可以读取 其中(标题!='')和(艺术家| |类似标题?和艺术家| |类似标题?…)

我很好奇,逻辑是否如此,以至于它会读到“where title!=(“”和artist | | title=?…)即使对其进行解析,也会返回一些古怪的结果

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

我认为是“MediaStore.Audio.keyFor(searchWords[I])”和艺术家键和标题键造成了问题。修改查询以搜索艺术家和标题修复了它。谢谢我有一个NexusOne,当我第一次开始编写这个应用程序时,它运行的是Android 2.2。它现在运行的是2.3,我没有看到我第一次发布问题时在股票音乐播放器中出现的奇怪结果。我认为是“MediaStore.Audio.keyFor(searchWords[I])”和艺术家键和标题键造成了问题。修改查询以搜索艺术家和标题修复了它。谢谢我有一个NexusOne,当我第一次开始编写这个应用程序时,它运行的是Android 2.2。它现在运行的是2.3,我没有看到我第一次发布这个问题时在股票音乐播放器上看到的奇怪结果。