我正在使用Download manager
下载文件并将其保存到外部存储中,如下所示:
DownloadManager.Request req = new DownloadManager.Request(uri);
req.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
.setDestinationInExternalFilesDir(TextReaderActivity.this, null, "podcasts/" + Integer.toString(article.id) + PODCAST_EXTENSION);
我得到以下异常:
Exception: need WRITE_EXTERNAL_STORAGE permission to use DESTINATION_FILE_URI: uid 10052 does not have android.permission.WRITE_EXTERNAL_STORAGE.
我已经读过在写入外部目录时我不需要WRITE_EXTERNAL_STORAGE
maxSdkVersion > 18
的权限,为什么它不需要DownloadManager
?
更新:
在Android 4.4及更高版本中,规则略有不同:
- 读取或写入以getExternalFilesDir()为根的目录树 和getExternalCacheDir(),你不需要权限
- 要写入外部存储器上的任何其他位置,您需要WRITE_EXTERNAL_STORAGE
- 要从外部存储的任何其他位置读取,您需要 WRITE_EXTERNAL_STORAGE(如果你已经有)或 READ_EXTERNAL_STORAGE(如果没有)
答案 0 :(得分:6)
您引用的有关WRITE_EXTERNAL_STORAGE
的规则适用于您的流程何时写入外部存储,然后仅适用于您的getExternalFilesDir()
及相关目录。
在这种情况下,您不会写入外部存储。您要求DownloadManager
写入外部存储。 DownloadManager
- 或者更确切地说,DownloadManager
与之对话的流程 - 要求您获得此权限,而且似乎不考虑API级别。
答案 1 :(得分:3)
DownloadManager.Request的文档清楚地提到您为任何setDestination
方法设置的目标必须位于外部存储上且您的应用必须具有WRITE_EXTERNAL_STORAGE
权限: