【发布时间】: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