简体   繁体   English

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

[英]Android app fails to write to downloads directory: java.io.FileNotFoundException (Permission denied)

I've got an old app that uses the following lines to download an APK into the devices downloads directory:我有一个旧应用程序,它使用以下几行将 APK 下载到设备下载目录中:

File downloadsDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File outputFile = new File(downloadsDirectory, "appname.apk");
FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
// ...

I don't know for sure if those lines ever worked, but according to the client it did.我不确定这些线路是否有效,但据客户说确实有效。 So, now I'm stuck with maintaining that app and I'll have to figure out a way to make it working again.所以,现在我坚持维护该应用程序,我必须想办法让它再次运行。 With the above lines I get the following error message:通过以上几行,我收到以下错误消息:

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) 

Given that the app is quite old, I immediately suspected some missing permissions and indeed there was no android.permission.WRITE_EXTERNAL_STORAGE and android.permission.READ_EXTERNAL_STORAGE entires in the manifest.鉴于该应用程序很旧,我立即怀疑缺少某些权限,并且清单中确实没有android.permission.WRITE_EXTERNAL_STORAGEandroid.permission.READ_EXTERNAL_STORAGE完整内容。 But even after adding those I still get the same error message.但即使在添加这些之后,我仍然收到相同的错误消息。

Any ideas, what else might be missing to get access to the downloads directory?任何想法,访问下载目录可能还缺少什么?

As comment above I will quote it as answer作为上面的评论,我将引用它作为答案

If you are running on Android 6.0 Marshmallow (API 23) and a above you should request runtime permission如果您在 Android 6.0 Marshmallow (API 23) 及更高版本上 运行,您应该请求 运行时权限

And remember to add requestLegacyExternalStorage = true in your Manifest if you target Android 10 or higher to temporarily opt-out of scoped storage如果您的目标是 Android 10 或更高版本以暂时退出范围存储,请记住在您的清单中添加 requestLegacyExternalStorage = true

Refer to this 参考这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 写入SD卡“java.io.FileNotFoundException:Permission denied” - Write to SD card “java.io.FileNotFoundException: Permission denied” 错误:Android打包程序:[…] java.io.FileNotFoundException:…(权限被拒绝) - Error:Android Packager: […] java.io.FileNotFoundException:… (Permission denied) java.io.FileNotFoundException :(权限被拒绝) - java.io.FileNotFoundException: (Permission denied) 尽管 chmod 777,java.io.FileNotFoundException(权限被拒绝) - java.io.FileNotFoundException (permission denied) despite chmod 777 java.io.FileNotFoundException:(权限被拒绝)仅在Oreo中 - java.io.FileNotFoundException: (Permission denied) Only in Oreo java.io.FileNotFoundException:/ mnt / sdcard / file(权限被拒绝) - java.io.FileNotFoundException: /mnt/sdcard/file (Permission denied) BitmapFactory:无法解码流:java.io.FileNotFoundException:打开失败:Android Q 上的 EACCES(权限被拒绝) - BitmapFactory: Unable to decode stream: java.io.FileNotFoundException:open failed: EACCES (Permission denied) on Android Q java.io.FileNotFoundException(是一个目录) - java.io.FileNotFoundException (Is a directory) 生成失败-Android棉花糖SMS_SEND错误:等级:java.io.FileNotFoundException:(访问被拒绝) - Build fails - Android Marshmallow SMS_SEND Error:Gradle: java.io.FileNotFoundException: (Access is denied) Android java.io.FileNotFoundException没有这样的文件或&gt;目录,尽管已授予权限 - Android java.io.FileNotFoundException No such file or > directory, although permissions are granted
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM