Android MediaStore通过与TITLE_KEY比较获得光标位置

时间:2014-05-29 10:14:22

标签: android android-contentresolver mediastore

我正在使用MediaStore的媒体内容,并使用SearchView来过滤listfragment中显示的内容。

当查询字符串为null(表示所有行)时,我保留对游标(mainCursor)的引用 当用户搜索时,我会根据查询获得新光标

根据我的理解(我是Cursor,DB& Contentprovider的新手),游标将包含与查询匹配的所有行,并且要查询的列为MediaStore.Audio.Media.TITLE,因此我可以看到匹配的标题列表。

public void doQuery(String query) {
    // TODO Auto-generated method stub
    Log.e(TAG,"inside doQuery: "+query);
    String search = MediaStore.Audio.Media.TITLE + " LIKE '%" + query + "%'";
    Cursor cursorNew = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,columns, search , null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
    sendBroadcast(new Intent(MainActivity.SWAP_CURSOR));

}

现在,当用户按下光标的列表元素i getPosition()并检索所选项目的TRACK_ID时。

我的问题是:如何搜索初始游标,即mainCursor TRACK_ID来自cursorNewto get the position of the matching TRACK_ID in mainCursor? 我不希望来自mainCursor的SELECT,因为我想从未过滤的光标中获取特定TRACK的位置

提前致谢

1 个答案:

答案 0 :(得分:1)

如果你只是对这个位置感兴趣,为什么不把audio_ids放在一个数组中

     ArrayList<String> audio_ids = new ArrayList<String>();

    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
        String audio_id =     cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID));
        audio_ids.add(audio_id);
    }

然后使用

        String audio_id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID));
        position = audio_ids.lastIndexOf(audio_id);

此示例查询播放列表。如果您有重复项,上面的示例将为您提供最后一个位置。 (你可能没想过的东西?) 我希望这会给你一些想法