3

Мне нужно загрузить изображение с URL-адреса с помощью DownloadManager и сохранить его в SD-карте с моим собственным каталогом, например «xyz». Это мой кодВызвано: java.lang.IllegalStateException: невозможно создать каталог на устройствах Android 6.0

File img_directory = null; 

img_directory = new File(Environment.getExternalStorageDirectory() + "/xyz"); 
if (!img_directory.exists()) 
{ 
    img_directory.mkdirs(); 
    DownloadManager mgr = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
    Uri downloadUri = Uri.parse("my image url"); 
    DownloadManager.Request request = new DownloadManager.Request(downloadUri); 
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE) 
     .setAllowedOverRoaming(true) 
     .setTitle("Demo") 
     .setDescription("Something useful. No, really.") 
     .setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN); 
     .setDestinationInExternalPublicDir(Environment.getExternalStorageDirectory().getAbsolutePath() + "/xyz", image.jpeg); 
     mgr.enqueue(request); 
} 

Этот код будет работать до Android 5.1.1. Когда я запускаю этот же код в 6.0 его повышение ошибки как этот

Caused by: java.lang.IllegalStateException: Unable to create directory: /storage/emulated/0/storage/emulated/0/xyz at android.app.DownloadManager$Request.setDestinationInExternalPublicDir(DownloadManager.java:538) 

Я добавил разрешения чтения и записи в файле манифеста. Как я могу устранить эту ошибку? Любое тело может мне помочь? Заранее спасибо.

+0

Вы ориентируетесь на приложение для api 23? Если это так, вам придется попросить разрешения на запись во время выполнения: http://developer.android.com/training/permissions/requesting.html – Praeterii

ответ

2
Caused by: java.lang.IllegalStateException: Unable to create directory: /storage/emulated/0/storage/emulated/0/xyz at android.app.DownloadManager$Request.setDestinationInExternalPublicDir(DownloadManager.java:538) 

Издание кажется, что это связанно с Android Runtime Permission введены в Android 6.0

Когда ваше приложение таргетинга уровня API 23, по умолчанию всех разрешений false вы должны запросить диалог разрешения и утвердить разрешение перед используя это в своем приложении.