android应用无法写入下载目录:java.io.filenotfoundexception(权限被拒绝)

watbbzwu  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(815)

我有一个旧应用程序,它使用以下行将apk下载到devices downloads目录:

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 清单中的实体。但即使加上这些,我仍然得到相同的错误信息。
任何想法,还有什么可能会错过获得下载目录?

v09wglhw

v09wglhw1#

如果您的目标是android 10或更高版本,请记住在清单中添加requestlegacyexternalstorage=true,以便临时退出作用域存储
请参阅此

abithluo

abithluo2#

作为上述评论,我将引用它作为答案
如果您运行的是android6.0marshmallow(api23)及以上版本,您应该请求运行时权限

相关问题