【问题标题】:Android max number of persistable uri permission granted to an app is limited to 128?Android 授予应用程序的可持久 uri 权限的最大数量限制为 128?
【发布时间】:2015-06-12 12:22:40
【问题描述】:

我的应用程序通过一个意图调用 Android 图片库,然后用户可以选择多个图片。事实证明,下面列出的代码(已经在其他帖子中报告过)对我来说很好。

if(Utils.isKitkat())
{
    final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION);
    ContentResolver resolver = getActivity().getContentResolver();
    for (Uri uri : images)
    {
        resolver.takePersistableUriPermission(uri, takeFlags);
    }
}

无论如何,我注意到授予我的应用程序的可持久 uri 的最大数量限制为 128。如果我选​​择超过 128 个 uri,我会收到错误:

java.lang.SecurityException: Permission Denial: opening provider........

当我尝试处理我无法为其保留权限的图像时。有人知道这个限制吗?你能想出什么解决办法吗?

【问题讨论】:

  • 我对有一个限制并不感到非常惊讶,尽管我有点惊讶它是如此之低。您确定需要长期访问图像吗?毕竟,请记住,用户完全有能力从背后的设备中删除这些图像。
  • @CommonsWare 关于“128”限制在 Gallery/Gallery2 AOSP 代码中的位置有什么线索吗?
  • @shkschneider:如果有限制,我会有点惊讶,尽管我想它可能存在。我会假设在核心 Android 中的限制更多,无论是跟踪持久权限。但是,这比我通常深入研究操作系统要深入,所以我不知道该去哪里看。
  • @CommonsWare 我需要长期访问,因为我的应用程序在桌面上随机显示用户选择的图像(我的应用程序是壁纸更换器)。显然,这意味着 uri 权限将在设备重新启动后持续存在,而无需用户重新选择图像。当用户删除图像时,我的应用程序会将其从所选图像列表中删除。你有什么办法绕过这个限制吗?
  • "你有什么办法绕过这个限制吗?" -- 除了制作图像的本地副本之外,我还没有想到,抱歉。

标签: android uri android-permissions


【解决方案1】:

我知道这是一篇旧帖子,但我在我的应用程序中遇到了同样的问题,因此开始查看 Android 源代码,发现:com.android.server.uri.UriGrantsManagerService,请参阅this link。

它定义了一个private static final int MAX_PERSISTED_URI_GRANTS = 128;

除了注意到该常量在该类的私有方法中使用外,我并没有确切地追踪它是如何使用的,该方法在 takePersistableUriPermission() 方法中被调用。所以似乎是合乎逻辑的“罪魁祸首”。

鉴于这是一个私有静态常量,我认为在他们决定更改它之前没有“解决方法”。

我输入了一个增强请求来跟踪这个here。

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 2016-11-26
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多