一尘不染

按文件扩展名(或文件类型)过滤托管查询,以获取Android游标

sql

我想使用Android SDK进行ManagedQuery,其中返回的结果由其各自的文件 扩展名
(例如,不一定是名称)过滤。我已经做了很多研究,很累,希望社区能够为我提供帮助。那应该很简单,但找不到解决方案。

从本质上讲,我想做的是:

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文件追加到列表中,这些文件也按字母顺序排序但无论文件类型如何,我都希望整个列表按字母顺序排列。

我知道这里有人可以轻松回答->预先感谢!!!


阅读 216

收藏
2021-03-08

共1个答案

一尘不染

我认为您要做的就是更改%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" );
2021-03-08