3

我想使用 Android SDK 执行 managedQuery,其中返回的结果由它们各自的文件扩展名过滤(例如,不一定是名称)。我已经做了相当多的研究并且很累,希望社区可以帮助我。我确信答案就在那里,但是,代替阅读 SQL 书籍或其他什么,我只是想做点什么这应该很简单,但没有找到解决方案。

我想要做的是,基本上,是这样的:

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

这有效,除非,如果标题类似于“mymp3.wav”,则此查询仍将返回它,因为名称中有“mp3”,但这不是我想要的 -> 我希望它纯粹基于文件过滤扩展名(或者,如果有办法,文件类型[例如,如果文件的内容实际上是 mp3,mp3 的文件扩展名更改为 .wav,这也适用于我的目的]) . 该解决方案应该指出一种过滤多个扩展名/文件类型的方法(例如,如果我希望查询返回所有 .mp3 文件以及 .wav 文件而不是 .amr 文件)。

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

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

但是,这并没有过滤整个结果......也就是说,返回的列表按 mp3 标题排序,然后,最后,它会将 .wav 文件附加到列表中,这些文件也按字母顺序排序但无论文件类型如何,我都希望整个列表按字母顺序排列。

我知道这里有人可以很容易地回答这个问题->提前谢谢!!!

4

1 回答 1

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" );
于 2011-10-28T18:08:37.600 回答