我是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的“拉雷多街道”中。它包含在结果中,但是还有几十首其他的歌曲似乎与我的查询完全不符。
内置音乐播放器似乎在做同样的事情,尽管它会返回更多无关的匹配。这是预期的行为吗?如果是,我可以添加一些额外的代码来过滤我的列表到完全匹配。如果不是,我做错了什么?
答案 0 :(得分:1)
有点远景,但尝试用括号括起你的WHERE语句以便它读取 where(title!='')AND(艺术家||标题如?AND artist || title like?...)
我很好奇逻辑是否正在发生,因为它读取“where title!=(''AND artist || title =?...),如果它甚至被解析,它将返回一些时髦的结果。
那就是说,如果你看到内置音乐播放器出现了奇怪的结果,你正在测试哪个设备/平台版本?