java - Android 应用程序无法写入下载目录:java.io.FileNotFoundException(权限被拒绝)
问题描述
我有一个旧应用程序,它使用以下行将 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 6.0 Marshmallow (API 23) 和更高版本上运行,您应该请求运行时权限
推荐阅读
- java - JavaFX 内联 CSS 悬停效果
- django - 在 django 中上传和读取 xlsx 文件
- node.js - 在节点中使用正则表达式提取字符串
- java - 当条件满足时,if 语句不输出变量
- django - NOT NULL 约束失败:cars_car.owner_id
- c# - 为什么我要使用自动实现而不是封装?
- visual-studio - VS Android App (Xamarin) Navigation Drawer App - 添加活动
- javascript - 在更改其属性后重新渲染子类织物对象
- firebase-realtime-database - Spock 测试方法是否被构造函数调用
- node.js - 如何从 Visual Studio 代码中调试 child_process fork 进程