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

初学求问, api29 及以后,MediaStore 获取到的_data 字段怎么显示到 ImageView 上?

  •  
  •   Features · 153 天前 · 1160 次点击
    这是一个创建于 153 天前的主题,其中的信息可能已经有所发展或是发生改变。
    api28 可以用把路径转为 uri 或者 bitmap
    api29 以后无法读取文件了,变成 permission denined 了

    官方文档和 guide 我看了半天就是没看明白
    谷歌了很久也没找到答案。。。
    6 条回复    2021-12-27 11:03:29 +08:00
    Features
        1
    Features  
    OP
       153 天前
    突然间又可以了
    加了 android:requestLegacyExternalStorage="true"
    但是注释掉又没啥变化😂
    kop1989
        2
    kop1989  
       153 天前 via iPad   ❤️ 1
    1 、没能动态获取权限。ReadExternalStorage
    2 、需要通过 provider 来获取,之后的 api 拿到的 url 都是相对路径了。
    rosu
        3
    rosu  
       153 天前 via iPhone   ❤️ 1
    读肯定是可以读的,如果你只是需要显示到 iv 上,直接调用 iv 的 api 就可以了。如果你要自己操作数据,那需要 open input stream
    Features
        4
    Features  
    OP
       153 天前
    @kop1989 @rosu
    谢谢,能请教下你,我 Android studio 的 open recent 的时候,
    原来有个 open in new windows 被我关闭了,然后我又手贱点了永远不要再提示,现在 open recent 只能在 current window
    有什么办法可以恢复吗?😂
    unco020511
        5
    unco020511  
       153 天前   ❤️ 1
    与分区存储有关( https://developer.android.com/training/data-storage?hl=zh-cn#scoped-storage)
    android 权限系统经过不断更新,意在根据文件用途来区分是否需要权限,而不是根据存储位置区分.
    在 api29(或更高)为目标平台的应用中,默认启用了分区存储.
    分区存储简单点说就是
    1:根据文件使用用途来区分你的存储位置,如果不需要与其他应用共享的文件(或媒体),你应该存储在私有目录(内部或者外部都有包含私有目录)
    2:如果对其他应用有价值的文件(如媒体),或者说你愿意共享的文件,你应该存储在外部共享目录
    3:访问私有目录无需任何存储权限;访问共享目录中归属于本应用的文件无需任何存储权限(api29 新特性:系统会将每个媒体文件归因于一个应用),访问共享目录中不属于本应用的文件,需要 'READ_EXTERNAL_STORAGE'权限(并且需要使用 MediaStore API)

    android:requestLegacyExternalStorage="true"是关闭分区存储
    kop1989
        6
    kop1989  
       153 天前   ❤️ 1
    @Features #4 System Setting 里,有个选项叫 Open project in...
    可以在设置的搜索框中搜索 "open project" 来快速定位自己想要了解或者修改的配置。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2416 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:39 · PVG 13:39 · LAX 22:39 · JFK 01:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.