通过Android Cursor的文件扩展名(或替代地,文件类型)筛选managedQuery

时间:2011-10-28 17:37:30

标签: android sql cursor projection mediastore

我想使用Android SDK执行managedQuery,其中返回的结果按其各自的文件扩展名进行过滤(例如,不一定是名称)。我做了很多研究,很累,希望社区可以帮助我..我肯定答案就在那里,但是,除了阅读SQL书或其他什么,我只是想做点什么这应该很简单,但找不到解决方案。

我想要做的事情基本上就是:

managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, myProjection, Audio.Media.DATA + " like ? ", new String[] {"%mp3%"}, null );

除了标题类似于“mymp3.wav”之类的标题之外,这个查询仍然可以返回,因为“mp3”在名称中但是,这不是我想要的 - >我希望它纯粹基于文件扩展名进行过滤(或者,如果有办法,可以使用文件类型[例如,如果mp3的文件扩展名更改为.wav,即使文件的内容实际上是mp3,那就是为我的目的工作])。解决方案应指明一种过滤多种扩展/文件类型的方法(例如,如果我希望查询返回所有.mp3文件以及.wav文件,但不返回.amr文件)。

此外,虽然我有你,但我想按字母顺序对结果进行排序。我尝试过类似的东西:

managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, myProjection, null, null, MediaStore.Audio.Media.TITLE + " ASC" );

然而,这并不会过滤整个结果......也就是说,返回的列表按照mp3标题进行排序,然后在结束时再添加列表中.wav文件也按字母顺序排序,但我希望整个列表都是按字母顺序排列的,无论文件类型如何。

我知道有人可以轻松回答这个问题 - >提前谢谢!!!

1 个答案:

答案 0 :(得分:8)

我认为您所要做的就是将%mp3%更改为%mp3。这将强制“mp3”位于文件名的末尾。

如果您需要选择多种文件类型,请按以下步骤操作:

managedQuery(
  Audio.Media.EXTERNAL_CONTENT_URI,
  myProjection, 
  Audio.Media.DATA + " like ? OR " + Audio.Media.DATA + " like ? ", 
  new String[] {"%mp3","%wav"}, 
  MediaStore.Audio.Media.TITLE + " ASC" );