我有一个应用程序,可以在登录名中从服务器下载图像。 第一次登录时,一切正常,但是当我卸载应用程序并再次安装时,出现此异常:
java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.gilapp.android.app/files/images/book_118.png: 打开失败:EACCES(权限被拒绝)
并且无法保存图像。
这是在我尝试创建输出流时发生的:
OutputStream output = new FileOutputStream(filePath);
在转到应用信息->存储->清除数据
之后,当我进行第二次安装时,图像下载正常另一个重要的一点是,它仅发生在三星的平板电脑中:SM-T800 (API level 23)
在其他设备上没有发生,我测试过的设备:Samsung SM-G900H (API level 23)
,Asus P028 (API level 24)
,Samsung SM-G950F (API level 28)
答案 0 :(得分:7)
如果您的应用程序指向的是Android 10及更高版本
在清单中的应用程序下面添加
android:requestLegacyExternalStorage="true"
答案 1 :(得分:1)
您需要获取Run-time permission才能写入存储。在保存文件之前,请检查权限。还有一些用于此工作的库:Android-Arsenal
最好使用FileProvider访问存储中的文件。
答案 2 :(得分:1)
在卸载应用程序时,getExternalFilesDir()
中的所有文件都将被删除,因此/images
目录消失了
重新安装后,您可以再次将文件写入不需要任何权限的目录。
不是在运行时。不在清单中。
但是您希望它们位于.... / images目录中。
您必须自己照顾该目录。
检查目录是否存在,然后创建目录,然后再尝试将文件放入其中。