Android Q 以后扫描文件的好办法

2020-02-24 13:16:21 +08:00
 KunMinX

众所周知,Android Q ( 10.0 )起,呼吁开发者迁移到新的分区存储方式, 简单来说,公共区域的文件,统一通过 MediaStore 或 SAF 的方式来存储访问,而 Environment 的那套 file path 访问方式被废弃。

那么问题来了:

如果我的 app 是通过 MediaStore 或 SAF 存储访问,那么我增删改的每一个内容,在数据库里都有记录,那没问题,

那如果是其他 app,开启兼容模式导致在 10.0 机器没有适配,那我通过 MediaStore 或 SAF 不就检索不到它们的信息?

更重要的是,如果我作为用户,手动从电脑中拷贝媒体文件到公共区域的目录中,这些文件我怎么在自己的 app 中扫描到?

因为首先,Environment 的方法被废弃,我不能走 file path 那套, 同时,ACTION_MEDIA_SCANNER_SCAN_FILE 广播被废弃, 并且 MediaScannerConnnection 的 scanFile 仍然是走 filePath … 对,是绝对路径!而且是文件的绝对路径!不是目录!

—— 是 Google 没有意识到这一点吗? ACTION_MEDIA_SCANNER_SCAN_FILE 的注释中憨憨地写道 —— “建议开发者通过 MediaStore 插入信息,这样就不用扫描了”(显然是没有考虑到上述两种情况啊 … )

所以 10 以及 11 的扫描工作怎么做哇,先立个帖,对此有经验的 v 友,烦请不吝赐教!

11444 次点击
所在节点    Android
9 条回复
RikkaW
2020-02-24 13:59:01 +08:00
https://www.v2ex.com/t/597899
包含 10 的做法
11 有没有变还没有看
RikkaW
2020-02-24 14:00:06 +08:00
@RikkaW
简单的说,已经不是扫描了,而是把文件内容和文件名称喂给媒体存储(
KunMinX
2020-02-24 14:15:17 +08:00
@RikkaW 大哥,我的问题是,媒体库里面没有记录怎么办 😂,我自己的我当然会直接通过 MediaStore API 喂进去了,只不过比如 app 中需要开发一个自用的图库,那么对于别的 app 或电脑上传到 公共区域的媒体,我怎么通知系统先扫描一遍呢,不然我无法通过 MediaProvider 检索到媒体记录 😂
RikkaW
2020-02-24 14:25:40 +08:00
@KunMinX 啊 凄惨看错(
不主动去触发扫描也会有扫描的(
KunMinX
2020-02-24 14:28:22 +08:00
@RikkaW 如果是系统扫描,那是要等到设备重启后才会发生 … 所以有什么是当下就可以扫描的呢。我这边给模拟器测试的时候,除非重启,否则看不到上一次电脑上传到公共目录的内容。
Jabin
2020-02-24 15:16:38 +08:00
FileObserver 监听 然后操作 MediaStore
mouyase
2020-02-25 03:34:36 +08:00
@KunMinX 我记得好像可以发一个广播通知媒体库主动扫描。
KunMinX
2020-02-25 13:17:41 +08:00
@mouyase 那个广播多年以前被限制了,只需系统自己通知和扫描,在开机的时候
ko1haha
2020-11-27 22:34:36 +08:00
人类太愚蠢了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/647070

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX