android - 按文件扩展名(或文件类型)过滤 Android Cursor 的 managedQuery

标签 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 文件也按字母顺序排序,但我希望整个列表按字母顺序排列,而不管文件类型如何。

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

最佳答案

我认为您所要做的就是将 %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" );

关于android - 按文件扩展名(或文件类型)过滤 Android Cursor 的 managedQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7932791/

相关文章:

Android - SDK 端口如何工作?

android - TabHost 内的 ListView (ActivityGroup)

android - 根据条件查询获取行数

仅当 Skype 在后台运行时才会发生 Android Skype 调用

android - 使用 MediaStore android 重命名图像

mysql - 这个 mysql 查询有什么问题? (Whmc)

mysql - 有没有办法指定 SELECT 数据库查询的起点?

sql - 选择某些相关行中特定列大于零的行

sql-server - 使用游标的优缺点(在SQL Server中)

html - 文本框中的光标位于中间而不是顶部