Не удается создать папку во внешнем общедоступном хранилище

Я пытаюсь просто создать подкаталог в каталоге изображений внешнего хранилища, однако я всегда оказываюсь в нижнем условии if. (Каталог не существует, и mkdir не может его создать).

    ...
    File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "foto_test_app");
    if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
    {
        Log.e(LOG_TAG, "External Storage not mounted.");
        return null;
    }

    if(!storageDir.exists() && !storageDir.mkdir())
    {
        Log.e(LOG_TAG, "Directory not created.");
    }
    ...

У меня есть строка в файле манифеста, которая гласит:

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

Я тестировал его на двух разных устройствах. У обоих не установлена ​​SDCard, но это не должно быть проблемой, верно? Что мне не хватает?


person Skusku    schedule 30.03.2018    source источник
comment
Вы пробовали storageDir.mkdirs() вместо storageDir.mkdir()?   -  person luckyging3r    schedule 30.03.2018
comment
Да, это работало одинаково плохо :(   -  person Skusku    schedule 30.03.2018
comment
Звучит глупо, но не могли бы вы попробовать поменять местами !storageDir.mkdir() и !storageDir.exists()?   -  person luckyging3r    schedule 30.03.2018


Ответы (1)


Вероятно, вы используете Android Marshmallow или более позднюю версию. Вы должны убедиться, что вы предоставили разрешение времени выполнения для хранилища.

Это можно сделать либо явно установив его в настройках вашего устройства Android, либо запросив разрешение во время выполнения.

Вы можете проверить ссылку ниже, как работает разрешение времени выполнения

https://developer.android.com/training/permissions/requesting.html

person Nikunj Peerbits    schedule 30.03.2018
comment
Спасибо, вы указали мне правильное направление, и это исправило это. Я активировал разрешение «хранение» в настройках своего планшета, и после этого я смог создать нужную папку. Это может быть просто быстрый хак разработки, но пока работает. Большое спасибо за Вашу помощь. Однако я использовал не Android Marshmallow, а версию 7.0, поэтому, если бы вы могли изменить свой ответ, сказав Android Marshmallow или выше, это помогло бы многим людям. - person Skusku; 30.03.2018