如何使用字符串实际搜索mediastore游标中的歌曲

时间:2013-07-31 08:15:20

标签: android

我已经设置了光标,但我仍然在努力搜索它。如何搜索曲目名称?我如何获取其ID以便将其传递给媒体播放器?我尝试了不同的东西,但没有成功。

基本上,我想知道如何在媒体商店中搜索某个字符串(在本例中为字符串songToPlay),获取结果,获取最佳匹配的ID并将其传递给我的媒体播放器服务以在后台播放。我问你的唯一问题是如何获得ID。

这是我正在使用的代码:

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] songToPlay = value.split("play song");
    String[] searchWords = songToPlay[1].split(" ");
                String [] keywords = null;
                StringBuilder where = new StringBuilder();
                where.append(MediaStore.Audio.Media.TITLE + " != ''");
    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
                    };
for (int i = 0; i < searchWords.length; i++) {
                        keywords[i] = '%' + MediaStore.Audio.keyFor(searchWords[i]) + '%';
                    }

                Cursor cursor = this.managedQuery(uri, projection, selection, keywords, MediaStore.Audio.Media.TITLE);              
                if (cursor.moveToFirst()) {
                    do{
                        test.setText(cursor.getString(cursor
                                .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)));
                    }while(cursor.moveToNext());
                }

我非常困惑,大部分代码来自互联网。我一直试图这样做2天,这就是我在这里问的原因。我自己做了几个小时的尝试。

编辑:当前代码。我怎么能找到位置 - 音乐ID或我需要从光标播放那首歌?

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            String songToPlay = value.replaceAll("play song", "").trim();
            int music_column_index;
            String[] projection = {
                    MediaStore.Audio.Media._ID,   
                    MediaStore.Audio.Artists.ARTIST,
                    MediaStore.Audio.Albums.ALBUM,
                    MediaStore.Audio.Media.TITLE
            };


            @SuppressWarnings("deprecation")
            Cursor cursor = this.managedQuery(uri, 
                    null, 
                    MediaStore.Audio.Media.TITLE + "=?", 
                    new String[]{songToPlay}, 
                    MediaStore.Audio.Media.TITLE + " ASC"); 

1 个答案:

答案 0 :(得分:2)

这会搜索MediaStore所有标题等于songToPlay字符串值的歌曲。

Cursor cursor = getContentResolver().query(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
    null, 
    MediaStore.Audio.Media.TITLE + "=?", 
    new String[]{songToPlay}, 
    MediaStore.Audio.Media.TITLE + " ASC");

然后,您当然可以查询光标以获取任何结果的ID(以及任何其他列)。

while (cursor.moveToNext()) {
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
    long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
    // Whatever else you need
}

但是,这需要完全匹配,您可能希望使用LIKE运算符进行更模糊的匹配。