![](/img/trans.png)
[英]Write to SD card “java.io.FileNotFoundException: Permission denied”
[英]Android app fails to write to downloads directory: java.io.FileNotFoundException (Permission denied)
我有一个旧应用程序,它使用以下几行将 APK 下载到设备下载目录中:
File downloadsDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File outputFile = new File(downloadsDirectory, "appname.apk");
FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
// ...
我不确定这些线路是否有效,但据客户说确实有效。 所以,现在我坚持维护该应用程序,我必须想办法让它再次运行。 通过以上几行,我收到以下错误消息:
E/my.appname.services.UpdateService: downloading of latest release failed
my.appname.exceptions.NetworkException: java.io.FileNotFoundException: /storage/emulated/0/Download/appname.apk (Permission denied)
at my.appname.services.UpdateRepository.download(UpdateRepository.java:89)
at my.appname.services.UpdateService.onUpdateFound(UpdateService.java:78)
at my.appname.services.UpdateService.checkForUpdates(UpdateService.java:61)
at my.appname.services.UpdateService.onHandleIntent(UpdateService.java:48)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:68)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: java.io.FileNotFoundException: /storage/emulated/0/Download/appname.apk (Permission denied)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:287)
at java.io.FileOutputStream.<init>(FileOutputStream.java:223)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at my.appname.services.UpdateRepository.download(UpdateRepository.java:81)
at my.appname.services.UpdateService.onUpdateFound(UpdateService.java:78)
at my.appname.services.UpdateService.checkForUpdates(UpdateService.java:61)
at my.appname.services.UpdateService.onHandleIntent(UpdateService.java:48)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:68)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.os.HandlerThread.run(HandlerThread.java:65)
鉴于该应用程序很旧,我立即怀疑缺少某些权限,并且清单中确实没有android.permission.WRITE_EXTERNAL_STORAGE
和android.permission.READ_EXTERNAL_STORAGE
完整内容。 但即使在添加这些之后,我仍然收到相同的错误消息。
任何想法,访问下载目录可能还缺少什么?
如果您的目标是 Android 10 或更高版本以暂时退出范围存储,请记住在您的清单中添加 requestLegacyExternalStorage = true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.