众所周知,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 友,烦请不吝赐教!
纠正一下。之前误以为从 Android Studio 往模拟器目录拷贝文件就算 MTP,经过调查和测试,通过 MTP 模式往手机上拷贝数据,可以触发系统自动扫描和入库记录。
那么问题就剩下,android 10 下入库自己程序新文件记录,因为 Environment 的方法被废弃,而MediaScannerConnection 又是走老式的 file uri。
我自己也在找找看。对此有经验的 v 友欢迎留言。
1
RikkaW 2020-02-24 13:59:01 +08:00 via Android
|
3
KunMinX OP @RikkaW 大哥,我的问题是,媒体库里面没有记录怎么办 😂,我自己的我当然会直接通过 MediaStore API 喂进去了,只不过比如 app 中需要开发一个自用的图库,那么对于别的 app 或电脑上传到 公共区域的媒体,我怎么通知系统先扫描一遍呢,不然我无法通过 MediaProvider 检索到媒体记录 😂
|
5
KunMinX OP @RikkaW 如果是系统扫描,那是要等到设备重启后才会发生 … 所以有什么是当下就可以扫描的呢。我这边给模拟器测试的时候,除非重启,否则看不到上一次电脑上传到公共目录的内容。
|
6
Jabin 2020-02-24 15:16:38 +08:00
FileObserver 监听 然后操作 MediaStore
|
9
ko1haha 2020-11-27 22:34:36 +08:00
人类太愚蠢了!
|