Android Download Manager setDestinationInExternalFilesDir

Я использую Менеджер загрузки и когда я использую

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

файлы загружаются в файлы Android/data/com.example.app/files/Download.

Когда я пытаюсь

setDestinationInExternalPublicDir("/folder", "example.ext");

Получаю: IllegalStateException: Cannot create directory mnt/sdcard/folder. Я также установил разрешение WRITE_EXTERNAL_STORAGE.

Что я делаю неправильно?

Ответ 1

Почему вы не используете путь absolute для 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");
    }
}

Я думаю, это может даже сработать для вас.

Ответ 2

использовать request.setDestinationInExternalPublicDir("/folder", "FileName.extention");

это сработало для меня..

Ответ 3

Добавьте разрешение в файл манифеста

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Ответ 4

Проверьте разрешение как

//регион [РАЗРЕШЕНИЕ]

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

Ответ 5

Я исправил свою проблему с помощью этой команды:

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

Где destinationDirectory

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