【问题标题】:Permission ACCESS_ALL_DOWNLOADS in Android when trying to load a file path尝试加载文件路径时Android中的权限ACCESS_ALL_DOWNLOADS
【发布时间】:2019-07-06 00:01:09
【问题描述】:

当我从 API 28 上的下载文件夹中选择一个文件时,我一直试图找到这个异常的答案,但没有成功,该文件最终被缓存为后备并检索了路径。

TL;DR:我需要什么来修复这个异常?

java.lang.SecurityException: Permission Denial: reading 
com.android.providers.downloads.DownloadProvider uri 
content://downloads/all_downloads/40 from pid=13467, uid=10091 requires 
android.permission.ACCESS_ALL_DOWNLOADS, or grantUriPermission()

到目前为止我已经尝试过的事情:

将此添加到清单文件中:

   <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_ALL_DOWNLOADS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name = "android.permission.ACCESS_DOWNLOAD_MANAGER"/>

并在运行时请求Manifest.permission.WRITE_EXTERNAL_STORAGE

【问题讨论】:

  • 你到底是怎么得到Uri的?而且,“最终被缓存”是指您正在将 Uri 写入磁盘并尝试稍后再次使用它吗?
  • 是的,路径解析尝试从几个前缀加载它,我在其中一些前缀中遇到了这个异常。由于它最终失败,路径解析继续进行,我最终加载它并从它的String externalFile = context.getCacheDir().getAbsolutePath() + "/" + FileUtils.getFileName(uri, context);缓存
  • 好的...那么你到底是怎么得到Uri的?
  • 我的意思是:context.getContentResolver().openInputStream(uri); 然后我将它写入之前分配的路径。但我正在尝试检索下载文件夹中文件的绝对路径(使用本机文件资源管理器),但不知何故,某些文件(在下载文件夹中)似乎不可能,我必须使用@987654329 @,复制它,然后使用副本的路径。
  • 我面临着完全相同的问题。你有没有想过解决方案?

标签: android download path permissions provider


【解决方案1】:

假设您要访问下载文件夹以获取图像文件

Intent intent = new Intent();
intent.setType("image/*");
if (Build.VERSION.SDK_INT <19)
    intent.setAction(Intent.ACTION_GET_CONTENT);
else
    intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
startActivityForResult(Intent.createChooser(intent, "Select Image"), requestSelectImage);

【讨论】:

    猜你喜欢
    • 2022-12-20
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多