【问题标题】:(Android 11) How do I allow an app to access a file in another app's Android/data folder?(Android 11) 如何允许一个应用访问另一个应用 Android/data 文件夹中的文件?
【发布时间】:2021-03-30 18:45:59
【问题描述】:

我有两个应用程序。一个应用程序 (P) 使用一个具有专有扩展名的文件(例如 .XXX)和一个 .json 文件,其中包含 P 将如何处理该其他文件的说明。另一个应用程序 (Q) 向 P 创建这些文件和意图,告诉 P .json 文件的路径,其中包含 .XXX 文件的路径。然后 P 读取 .json 文件(在 Q 的目录中),然后读取 .XXX 文件(再次在 Q 的目录中)。 P 对 .XXX 文件做了很多事情,但我认为 P 不必写入它。

在 Android 11 之前,所有文件都位于 root/MyAppDirectory_Q 中,并且可以轻松地在应用之间访问/共享文件。随着范围存储越来越流行,我需要将所有文件保存在 Android/data/com.companyName.MyApp_Q 目录中。

我如何从 Q 到 P 并授予 P 访问 Q 的 Android/data 文件夹中两个文件的权限?我在 Xamarin 中执行此操作,但一旦 Q 正常工作,我最终将不得不在纯 Java 中重新创建 Q。

【问题讨论】:

  • 您应该使用文件/内容提供商来提供您的文件。
  • 您也可以在公共 Documents 目录中创建一个文件,并为其他应用程序使用 SAF 让用户选择要 rad/write 的文件。

标签: c# android xamarin xamarin.android android-11


【解决方案1】:

一种方法是让 Q 使用 Intent 中的 URI 向 P 发送广播(使用 ClipData)。 Q 将使用FLAG_GRANT_PERSISTABLE_URI_PERMISSION 和grantUriPermission() 授予持久权限。 P 将接收带有 URI 的广播并使用 takePersistableUriPermission() 接受它们。之后,P 将能够使用提供的 URI 访问文件。 URI 可能来自 FileProvider,因此它们由 Q 的外部文件目录中的文件支持。

【讨论】:

  • 与这些方法等效的 Xamarin 是什么,我该如何称呼它们?
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 2016-04-18
  • 2021-06-12
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 2012-12-04
相关资源
最近更新 更多