繁体   English   中英

Android 范围存储 (10+) 从图库中挑选

[英]Android Scoped Storage (10+) Cross-Profile Pick From Gallery

根据最近的 Google Play 裁决,如果目标是 11+,则必须删除旧存储访问权限。

我找不到交叉配置文件的工作方式。 我当前的代码使用旧存储访问可以正常工作 - 能够从工作资料中选择媒体到个人资料。 当我从AndroidManifest.xml中删除android:requestLegacyExternalStorage=true时,我当前的代码库不再能够从个人资料中看到媒体。

我目前的意图很简单,如果在同一配置文件中但不适用于跨配置文件,则如下所示。

我的问题是:为了让它发挥作用,我缺少什么? 下面发布的代码片段在同一配置文件中运行良好。 但是,一旦它发生交叉配置,它就会停止工作。

使用设备:小米 Pocophone F1、三星 Galaxy A51

val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
activity.startActivityForResult(Intent.createChooser(intent, "Add From Gallery"), 100)

如果交叉配置文件是指使用工作配置文件等在 android 中添加的其他用户,则以下内容会有所帮助:

工作配置文件和个人配置文件使用不同的存储区域,在一个配置文件上有效的文件 URI 在另一个配置文件上无效。 这种情况意味着,如果您将文件 URI 附加到意图,并且在其他配置文件上处理了该意图,则处理程序将无法访问该文件。

相反,您应该使用内容 URI 共享文件,如下所示:


// Open File object from its file URI
File fileToShare = new File(fileUriToShare);

Uri contentUriToShare = FileProvider.getUriForFile(getContext(),"com.example.myapp.fileprovider",fileToShare);

内容 URI 包含文件路径、提供文件的权限以及标识文件的 ID 号。 您可以使用 FileProvider 为任何文件生成内容 ID。 然后,您可以与其他应用程序(甚至在其他个人资料上)共享该内容 ID。 收件人可以使用内容 ID 来访问实际文件。

资料来源: https://developer.android.com/work/managed-profiles#sharing_files

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM