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/"