【问题标题】:Filter a managedQuery by file extension (or, alternatively, file type) for an Android Cursor根据 Android 游标的文件扩展名(或文件类型)过滤 managedQuery
【发布时间】:2011-12-17 11:34:02
【问题描述】:

我想使用 Android SDK 执行 managedQuery,返回的结果由它们各自的文件 extension 过滤(例如,不一定是名称)。我已经做了很多研究并且很累,希望社区可以帮助我。我确信答案就在那里,但是,代替阅读 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% 和 %.wav% 工作??? (向数组添加另一个字符串不起作用;它会导致崩溃并显示以下消息:E/AndroidRuntime(9407): java.lang.RuntimeException: Unable to start activity ... android.database.sqlite.SQLiteException: bind or列索引超出范围:句柄 0x388060
  • 试试这个,managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, myProjection, Audio.Media.DATA + "like ?", new String[] {"%.mp3","%.wav"},空值 );让我知道发生了什么。
  • 不,这行不通。我收到了我之前评论中提到的错误......但是,我喜欢帮助!如果我们能让它发挥作用,会更喜欢它;)
  • 试试 Kurtis Nusbaum 建议的查询?

标签: android sql cursor projection mediastore


【解决方案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" );

【讨论】:

  • 好的。我认为这比上面 cmets 中讨论的 %.mp3% 好一点。但是,我仍然需要能够拥有多个 selectionArgs(例如,能够让它返回 .wav .mp3 文件)(并且,最好是全部排序)。你有解决办法吗?
  • 干得漂亮!!感谢您更新您的答案!我正在尝试 Audio.Media.DATA +" like ? OR like ?" 无济于事;没想到要尝试在其中添加第二个“Audio.Media.DATA”。非常感谢您!! (也感谢您,user370305 以及您的帮助/勤奋!)
  • 是的,你必须添加 Audio.Media.DATA 两次,这有点可惜,但这只是你的 SQL 语法。
  • 好的,最后一个(我发誓)问题 -> 如何使排序顺序 'MediaStore.Audio.Media.TITLE + "ASC"' 以不区分大小写的方式对结果列表进行排序?我所有以小写'a'开头的东西都在以大写'Z'开头的东西的底部...... ???
  • @fatfreddyscat 如果您还有其他问题,请作为其他问题提出。这样以后其他正在寻找类似东西的人就不必在 cmets 中来回查看我们的来回了……这样我就可以获得更多的代表;)
猜你喜欢
  • 2010-10-07
  • 1970-01-01
  • 2012-01-23
  • 2012-09-27
  • 2016-03-20
  • 2016-12-06
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多