我想使用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文件也按字母顺序排序,但我希望整个列表都是按字母顺序排列的,无论文件类型如何。
我知道有人可以轻松回答这个问题 - >提前谢谢!!!
答案 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" );