V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KunMinX
V2EX  ›  Android

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

  •  
  •   KunMinX · 2020-02-24 13:16:21 +08:00 · 7208 次点击
    这是一个创建于 1515 天前的主题,其中的信息可能已经有所发展或是发生改变。

    众所周知,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 友,烦请不吝赐教!

    第 1 条附言  ·  2020-02-25 13:14:15 +08:00

    纠正一下。之前误以为从 Android Studio 往模拟器目录拷贝文件就算 MTP,经过调查和测试,通过 MTP 模式往手机上拷贝数据,可以触发系统自动扫描和入库记录。

    那么问题就剩下,android 10 下入库自己程序新文件记录,因为 Environment 的方法被废弃,而MediaScannerConnection 又是走老式的 file uri

    我自己也在找找看。对此有经验的 v 友欢迎留言。

    9 条回复    2020-11-27 22:34:36 +08:00
    RikkaW
        1
    RikkaW  
       2020-02-24 13:59:01 +08:00 via Android
    https://www.v2ex.com/t/597899
    包含 10 的做法
    11 有没有变还没有看
    RikkaW
        2
    RikkaW  
       2020-02-24 14:00:06 +08:00 via Android
    @RikkaW
    简单的说,已经不是扫描了,而是把文件内容和文件名称喂给媒体存储(
    KunMinX
        3
    KunMinX  
    OP
       2020-02-24 14:15:17 +08:00
    @RikkaW 大哥,我的问题是,媒体库里面没有记录怎么办 😂,我自己的我当然会直接通过 MediaStore API 喂进去了,只不过比如 app 中需要开发一个自用的图库,那么对于别的 app 或电脑上传到 公共区域的媒体,我怎么通知系统先扫描一遍呢,不然我无法通过 MediaProvider 检索到媒体记录 😂
    RikkaW
        4
    RikkaW  
       2020-02-24 14:25:40 +08:00
    @KunMinX 啊 凄惨看错(
    不主动去触发扫描也会有扫描的(
    KunMinX
        5
    KunMinX  
    OP
       2020-02-24 14:28:22 +08:00
    @RikkaW 如果是系统扫描,那是要等到设备重启后才会发生 … 所以有什么是当下就可以扫描的呢。我这边给模拟器测试的时候,除非重启,否则看不到上一次电脑上传到公共目录的内容。
    Jabin
        6
    Jabin  
       2020-02-24 15:16:38 +08:00
    FileObserver 监听 然后操作 MediaStore
    mouyase
        7
    mouyase  
       2020-02-25 03:34:36 +08:00
    @KunMinX 我记得好像可以发一个广播通知媒体库主动扫描。
    KunMinX
        8
    KunMinX  
    OP
       2020-02-25 13:17:41 +08:00
    @mouyase 那个广播多年以前被限制了,只需系统自己通知和扫描,在开机的时候
    knziha
        9
    knziha  
       2020-11-27 22:34:36 +08:00
    人类太愚蠢了!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1280 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 861ms · UTC 23:31 · PVG 07:31 · LAX 16:31 · JFK 19:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.