【问题标题】:Android MediaStore query MediaStore.MediaColumns.TITLE column is null for some filesAndroid MediaStore 查询 MediaStore.MediaColumns.TITLE 列对于某些文件为空
【发布时间】:2016-08-31 02:45:54
【问题描述】:

我正在查询 Android 的 MediaStore 文件数据库 -MediaStore.Files.getContentUri("external") - 对于某些特定文件夹,MediaStore.MediaColumns.TITLE 和 MediaStore.MediaColumns.DISPLAY_NAME 均为空,而对于其他文件夹,此值存在。 我找不到任何关于 MediaStore.MediaColumns.TITLE 可能为空的文档。

这发生在一些内部 Android 目录中,例如:

_data: /storage/emulated/0/Music, title: null, _display_name: null
_data: /storage/emulated/0/Notifications, title: null, _display_name: null
_data: /storage/emulated/0/Pictures, title: null, _display_name: null

但是,对于其他一些文件夹,标题在那里:

 _data: /storage/emulated/0/Android, title: Android, _display_name: null
 _data: /storage/emulated/0/DCIM, title: DCIM, _display_name: null
 _data: /storage/emulated/0/Download, title: Download, _display_name: null

所有数据都直接来自 MediaStore 查询。

我知道我可以直接使用数据,但我试图根据 TITLE 对查询进行排序,这会导致不正确的结果,因为有些是空的。

这是预期的行为吗?如何处理并检索所有按标题正确排序的文件?

【问题讨论】:

  • 我想知道这是否应该是去的方式:stackoverflow.com/questions/8187828/…
  • 您的标题或显示名称为空?
  • @HirenPatel 为空时,标题和显示名称均为空。仅填写数据字段。
  • 您是只处理音频文件还是所有类型的文件?
  • @HirenPatel 所有类型的文件。 MediaStore.Files.getContentUri("external");

标签: android sql-order-by android-cursor mediastore


【解决方案1】:

看起来这是一个 android 限制。 您可以随时尝试通过以下方式下订单:

select substr(
    substr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), instr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), '/') + 1),
    instr(substr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), instr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), '/') + 1), '/') + 1
    ) from tablename;

请注意,这不是递归的,但最多只能用于 3 个'/'。

这可以递归完成,但后来才在 Android 上引入

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多