我们正在开发一个应用程序,将作为一个服务运行。其中一个功能将下载文件在给定的URL(ex PDF),并保存到下载文件夹,以便用户可以从一个特定的应用程序(AvenzaMap)加载它。
所有的下载过程都应该没有任何用户交互,因为它是由一个在后台运行的服务完成的。
我添加了以下权限:
安卓清单.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<application
android:requestLegacyExternalStorage="true"
无论我将尝试我得到以下错误
java.io.FileNotFoundException: /storage/emulated/0/Download/name.pdf (Permission denied)
如何获得对下载文件夹(这是系统下载文件夹)的写入权限,而无需打开Activity来保存文件?
我会尝试多个解决方案尚未(2天的谷歌)没有成功
如前所述,目前我们以API 28(android 9)为目标,稍后我们将以其他API为目标,因为我们将设备提供给客户端,所以我们仅针对设备所具有的API进行开发。
2条答案
按热度按时间shyt4zoc1#
我最近不得不开发一个将语音文件下载到设备的应用程序。虽然你可以在Android清单中指定权限,但你必须向用户请求权限。我已经用Java完成了这一操作,但转换到Kotlin应该很简单。
完成此操作后,可以通过多种方式下载文件。值得注意的是,文件不能下载到Android设备上的任何位置。只能使用特定的目标位置。
我希望这能帮助你消除一些困惑。编码快乐!
ctrmrzij2#
如何获得对下载文件夹(这是系统下载文件夹)的写入权限,而无需打开Activity来保存文件?
最简单的解决方案是在不需要权限的地方编写代码。
Context
上返回File
对象的方法,如getFilesDir()
和getExternalFilesDir()
,是主要的候选方法。除此之外,您的应用程序似乎已预装在某些设备上(“我们向客户端提供设备”)。如果您已开发自定义固件映像,则应能够将权限作为该映像的一部分预先授予您的应用。或者,如果设备已配置并正在分发(没有首次开机的Onboarding UI),您可以手动将
WRITE_EXTERNAL_STORAGE
授予您的应用,或让UI自动化脚本执行此操作。如果这些都不是选项,则您别无选择,只能向用户请求权限。