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

2021-12-26 21:09:22 +08:00
 Features
api28 可以用把路径转为 uri 或者 bitmap
api29 以后无法读取文件了,变成 permission denined 了

官方文档和 guide 我看了半天就是没看明白
谷歌了很久也没找到答案。。。
4363 次点击
所在节点    Android
6 条回复
Features
2021-12-26 21:17:44 +08:00
突然间又可以了
加了 android:requestLegacyExternalStorage="true"
但是注释掉又没啥变化😂
kop1989
2021-12-26 21:25:02 +08:00
1 、没能动态获取权限。ReadExternalStorage
2 、需要通过 provider 来获取,之后的 api 拿到的 url 都是相对路径了。
rosu
2021-12-27 07:56:18 +08:00
读肯定是可以读的,如果你只是需要显示到 iv 上,直接调用 iv 的 api 就可以了。如果你要自己操作数据,那需要 open input stream
Features
2021-12-27 10:53:02 +08:00
@kop1989 @rosu
谢谢,能请教下你,我 Android studio 的 open recent 的时候,
原来有个 open in new windows 被我关闭了,然后我又手贱点了永远不要再提示,现在 open recent 只能在 current window
有什么办法可以恢复吗?😂
unco020511
2021-12-27 11:00:09 +08:00
与分区存储有关( 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
2021-12-27 11:03:29 +08:00
@Features #4 System Setting 里,有个选项叫 Open project in...
可以在设置的搜索框中搜索 "open project" 来快速定位自己想要了解或者修改的配置。

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

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

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

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

© 2021 V2EX