安卓下载管理器setDestinationInExternalFilesDir函数

17
我正在使用下载管理器,当我使用

时。
 setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS, "example.ext");

文件被下载到 Android/data/com.example.app/files/Download 文件夹。

当我尝试

setDestinationInExternalPublicDir("/folder", "example.ext");
我得到的是:IllegalStateException: 无法创建目录mnt/sdcard/folder。我已经设置了WRITE_EXTERNAL_STORAGE权限。我做错了什么?
5个回答

2
在清单文件中添加权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

1

为什么不使用绝对路径来指定ExternalFileDir?

File sdCard = Environment.getExternalStorageDirectory();
String folder = sdCard.getAbsolutePath() + "/YourFolder" ;
File dir = new File(folder );
if (!dir.exists()) {
if (dir.mkdirs()) {
    Log.i(Tag,"Directory  Created");
    }
}

我猜这对你甚至可能有用。

我尝试了以下代码。 downloadRequest.setDestinationInExternalFilesDir(v.getContext(), folder, down.getTitle()+".epub"));但是文件下载到了 file:///mnt/sdcard/Android/data/com.example.app/files/folder-path - Aravind Srivatsan
1
我通过将文件从Android/data/com.example.app/files下载后移动到所需的目录来暂时修复了它。 - Aravind Srivatsan
我通过使用以下命令解决了我的问题:request.setDestinationUri(Uri.fromFile(new File(destinationDirectory,fileName + fileExtension))); 其中destinationDirectory是String destinationDirectory = Environment.getExternalStorageDirectory() + "/MyFolder/"。 - Aliton Oliveira

1

使用request.setDestinationInExternalPublicDir("/folder", "FileName.extention");

这对我很有效...


1
可能只是因为我的版本比这篇文章更新得多,但我不得不添加上下文,所以请求设置目标位置在外部公共目录中,使用此代码:request.setDestinationInExternalPublicDir(this, "/folder", "Filename.extension"); - ConcernedHobbit

1
我通过使用以下命令解决了我的问题:

request.setDestinationUri(Uri.fromFile(new File(destinationDirectory,fileName + fileExtension))); 

destinationDirectory是什么

String destinationDirectory = Environment.getExternalStorageDirectory() + "/MyFolder/"

1
这让我出现了这个错误 https://stackoverflow.com/questions/67932843/w-downloadmanager-aborting-request-for-download-17-failed-to-create-target-fil?noredirect=1#comment120073691_67932843 - Sachin Burdak

0
检查权限如下:

//region [ PERMISSION ]

public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 123;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public static boolean CheckPermission(final Context context){
    int currentAPIVersion = Build.VERSION.SDK_INT;
    if( currentAPIVersion >= Build.VERSION_CODES.M){
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE)) {
                AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
                alertBuilder.setCancelable(true);
                alertBuilder.setTitle("Permission necessary");
                alertBuilder.setMessage("External storage permission is necessary");
                alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.requestPermissions((Activity) context,
                                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
                    }
                });
                AlertDialog alert = alertBuilder.create();
                alert.show();
            } else {
                ActivityCompat.requestPermissions((Activity) context,
                        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
            }
            return false;
        } else {
            return true;
        }
    } else {
        return true;
    }
}

//endregion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接