Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.IllegalStateException:不是Android 10上的标准目录:/storage/emulated/0/Download/_Java_Android_Android Studio - Fatal编程技术网

java.lang.IllegalStateException:不是Android 10上的标准目录:/storage/emulated/0/Download/

java.lang.IllegalStateException:不是Android 10上的标准目录:/storage/emulated/0/Download/,java,android,android-studio,Java,Android,Android Studio,我想从我的url下载文件并保存到Android 10中的外部存储下载目录。 我已经用这个代码下载了 public void StartNewDownload(String url) { DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); request.setDescription("Downloading Profile"); request.setTi

我想从我的url下载文件并保存到Android 10中的外部存储下载目录。 我已经用这个代码下载了

    public void StartNewDownload(String url) {

    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
    request.setDescription("Downloading Profile"); 
    request.setTitle("Abc App");
    request.setDestinationInExternalPublicDir(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+ File.separator, "parag.jpeg"); 

    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    final long downloadId = manager.enqueue(request); 

}
它显示了错误

E/AndroidRuntime:致命异常:主 流程:com.example.abc,PID:15197

java.lang.IllegalStateException: Not one of standard directories: /storage/emulated/0/Download/
    at android.os.Parcel.createException(Parcel.java:2079)
    at android.os.Parcel.readException(Parcel.java:2039)
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
    at android.content.ContentProviderProxy.call(ContentProviderNative.java:658)
    at android.content.ContentProviderClient.call(ContentProviderClient.java:558)
    at android.content.ContentProviderClient.call(ContentProviderClient.java:546)
    at android.app.DownloadManager$Request.setDestinationInExternalPublicDir(DownloadManager.java:569)
    at com.example.abc.Activity.showDetails.StartNewDownload(showDetails.java:102)
    at com.example.abc.Activity.showDetails$1.onClick(showDetails.java:68)
但是如果我使用

request.setDestinationInExternalFilesDir(this,Environment.DIRECTORY_DOWNLOADS+ File.separator , "parag.jpeg");
这将下载该文件,但位于我的应用程序特定文件夹中 但我想下载外部公共下载目录中的文件,因为您的代码API已弃用

/storage/emulated/0/Android/data/packagename/files/Pictures/parag.jpg
使用以下代码将文件保存在标准目录中

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES,"parag.jpeg")
它将尝试保存到标准目录

/storage/emulated/0/Android/data/packagename/files/Pictures/parag.jpg
对于针对Build.VERSION_code.Q或更高版本的应用程序, 不需要WRITE_EXTERNAL_存储权限,并且dirType必须 是已知的公共目录之一,如 环境#目录#下载,环境#目录#图片, 环境#目录#电影等


我希望这会有所帮助。

首先,将这一行添加到应用程序标记内的AndroidManifest.xml文件中

android:requestLegacyExternalStorage="true"
使用
Environment.DIRECTORY\u PICTURES
或适合您的文件的任何环境

request.setAllowedNetworkTypes(
            DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE
        )
            .setAllowedOverRoaming(false).setTitle("Krishan Demo") //Download Manager Title
            .setDescription("Downloading...") // Download manager Discription
            .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
            .setDestinationInExternalPublicDir(
                Environment.DIRECTORY_PICTURES, // It can be any stanaderd directory Like DCIM,Downloads etc...
                "/KrishanImages/testing.jpg" // Your Custom directory name/Your Image file name
            )

您可以使用下面的代码保存文件

request.setDestinationInExternalFilesDir(this,Environment.DIRECTORY_DOWNLOADS, fileType)
这对我有用

在清单中
android:requestLegacyExternalStorage=“true”
适用于v28和v28以下的Android+

  String folder = "/Download";
                    try { //V28 Below
                        request.setDestinationInExternalPublicDir(folder, filename);//v 28 allow to create and it deprecated method(v28+)

                    } catch (Exception e) {

                        //For Android  28+
                        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);//(Environment.DIRECTORY_PICTURES,"picname.jpeg")
                    }

没有问题仍然存在'E/AndroidRuntime:FATAL EXCEPTION:main Process:com.example.abc,PID:29020 java.lang.IllegalStateException:不是标准目录之一:/storage/emulated/0/Android/data/com.example.abc/files/Download'@parag使用setdestinationnexternalfilesdir方法解决此问题。我已经更新了我的答案。谢谢@jose praveen我从你的answer@parag我的解决方案有效吗?如果是,请将此答案标记为已解决。获取该文件时,可以使用val path=getExternalFilesDir(Environment.DIRECTORY\u DOWNLOADS)?。绝对路径+“/”+文件类型这将为您提供使用上述语句保存文件的确切路径。必须添加到清单中