Ошибка создания папки android

Android не удалось создать папку

Вот причины, по которым я столкнулся

1. Нет приложения разрешения, это очень просто, добавьте приложение разрешения в файл manifect.xml

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

2. Версия Android выше 6.0, после 6.0 многим мобильным телефонам необходимо динамически запрашивать разрешения. Недостаточно настроить это в файле.

    // Разрешение динамического приложения
    private void getPrimission() {
        PackageManager pm = getPackageManager();
        boolean permission = (PackageManager.PERMISSION_GRANTED ==
                pm.checkPermission("android.permission.CAMERA", "com.zhengyuan.emcarsend"));
        if (permission) {
                         // "Есть это разрешение"
        } else {
                         // «Нет такого разрешения»
                         // Если версия Android больше или равна 6.0, разрешение необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.CAMERA}, 15);
            }
        }
        permission = PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.WRITE_EXTERNAL_STORAGE", "com.zhengyuan.emcarsend");
        if (permission) {
                         // "Есть это разрешение"
                         //Toast.makeText(Carout.this, "имеет разрешение", Toast.LENGTH_SHORT) .show ();
        } else {
                         // "Дерево имеет это разрешение"
                         // Если версия Android больше или равна 6.0, разрешения необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 15);
            }
        }
        permission = PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_EXTERNAL_STORAGE", "com.zhengyuan.emcarsend");
        if (permission) {
                         // "Есть это разрешение"
                         //Toast.makeText(Carout.this, "имеет разрешение", Toast.LENGTH_SHORT) .show ();
        } else {
                         // "Дерево имеет это разрешение"
                         // Если версия Android больше или равна 6.0, разрешения необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 15);
            }
        }
    }

В приведенном выше примере есть разрешения на чтение и запись для камеры и места для хранения.

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

Кстати,

Я столкнулся с этой проблемой, когда делал снимки. Я продолжал снимать и не мог создавать папки.

Одна из причин — создание многоуровневых каталогов,

Другой — отчет об ошибке 7.0, доступный за пределами приложения через ClipData.Item.getUri ().

Вы можете обратиться кhttps://blog.csdn.net/qq_23179075/article/details/70314473,

Мой телефон разработки — Nexus 5, работает Android 4.4.2.

В моем приложении я пытаюсь создать папку на внешнем хранилище, которая будет хранить отладочную информацию для моего приложения. В основном он будет содержать все команды, выполняемые приложением, поэтому, когда пользователь сталкивается с проблемой, у меня есть возможность отправить мне информацию из папки отладки для анализа.

Я начал, пытаясь записать файл в папку, но обнаружил, что возникла ошибка при создании папки. Сначала я использовал mkdir(), затем перешел на mkdirs(), который также не работал.

У меня есть <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> в моем манифесте.

Вот код для создания папки:

    File folder = new File(Environment.getExternalStorageDirectory() + "/DebugData");

    String path = folder.getPath();

    if(!folder.mkdirs() || !folder.exists()){        
            Log.e(LOG_TAG, path + " failed");
        } else {
            Log.d(LOG_TAG, path + " succeeded");
        } 

Вот что я также пробовал:

    //Check SD card state
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) {
        Log.e(LOG_TAG, "Error: external storage is read only or unavailable");
    } else {
        Log.d(LOG_TAG, "External storage is not read only or unavailable");
    }

Это возвращает, что внешняя память не доступна только для чтения или недоступна.

Я также пробовал разные пути, такие как File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Folder1");

Вот где это стало действительно запутанным.

Я пробовал разработку на разных телефонах. Во-первых, я схватил Galaxy S4 GT-i9505 running Android 4.2.2, и он сработал. Мне удалось создать папки и написать им. Это показало мне, что код работает. Также путь, возвращаемый при запуске кода на S4 и Nexus 5, был таким же.

Тогда я подумал, что это может быть версия для Android. Поэтому я схватил Nexus 4 с Android 4.4.2, и код тоже работал над ним. Создал папки и разрешил мне писать им.

Ни один из телефонов не укоренен и не является стандартным. Там нет специальных приложений или чего-либо, что я могу думать о настройках на Nexus 5, которые могут вызвать проблемы с разрешениями. Соединение установлено на Media Device (MTP).

EDIT:

Я должен добавить, что я попробовал следующее, которое также не сработало:

  • Запись файла в корневой каталог внешнего хранилища
  • Создание файла в корневом каталоге внешнего хранилища и его запись
  • Создание папки в выделенном пути и запись в нее файла
  • Создание файла в указанном пути и его записи

Я запутался в том, что вызывает это, есть ли что-нибудь еще, что я могу проверить или изменить, чтобы исправить проблему?

ИЗМЕНИТЬ 2:

Оказывается, проблема возникла из-за, я думаю, индексации.

В основном все другие устройства, на которых я тестировался, позволили мне снова подключить USB-соединение и просмотреть созданные файлы и папки.

По какой-то причине мой Nexus 5 не индексирует папки/файлы, даже если они существуют.

Я загрузил другое стороннее приложение-проводник файлов и заметил, что все папки и файлы были там.

Итак, чтобы просматривать эти папки и файлы с помощью USB-отладки, я должен перезагрузить телефон, чтобы повторно проиндексировать их, что кажется довольно раздражающим, но это лучше, чем он вообще не работает.

Спасибо.

Я знаю, что это дублирующий вопрос, но для этого нет решения. Я использовал последний уровень API 24 и тест на API 23. Мне нужно сохранить изображение на SD-карте с моей папкой имени приложения, но папка не создана…

Я написал следующий метод, но он не работает

    public  void actionScreenShot(View view) {

        //enable drawing cache true
        imageContainer.setDrawingCacheEnabled(true);
        imageContainer.buildDrawingCache(true);

        //create image from layout
        Bitmap bitmap = Bitmap.createBitmap(imageContainer.getDrawingCache());


        //String folder_path = getApplicationContext().getFilesDir().getPath() + "/MyAppTest/"; //It's work properly
        //String folder_path = getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DCIM) + "/MyAppTest/"; //It's work properly 
        String folder_path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() + "/MyAppTest"; //It's not work properly
        if (checkFile(folder_path)) {
            saveFile(new File(folder_path), bitmap);
        } else {
            File folder = new File(folder_path);
            if (folder.mkdirs()) {
                saveFile(folder, bitmap);
            } else {
                Log.d("Directory", " >> not created");
            }

        }
    }

    public void saveFile(File folder, Bitmap bitmap) {
        boolean success = false;
        try {
            File file = new File(folder, "temp.png");
            if (file.exists()) file.delete();
            FileOutputStream out = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
            success = checkDatabase(file.getPath());
        }catch (Exception e) {
            e.printStackTrace();
        }

        if (success) {
            Log.d("FILE", "success");
        } else {
            Log.d("FILE", "not success");
        }
    }

    public boolean checkFile(String myPath) {
        boolean isExist = false;
        try {
            File file = new File(myPath);
            isExist = file.exists();
        } catch (Exception e) {

        }
        return isExist;

    }

Разрешение дается также в AndroidManifest.xml

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

Зарегистрируйте трассировку следующим образом…

10-05 17:08:09.424 2808-2808/packagename D/Directory  >> not created

Если какое-либо решение доступно, помогите мне…

Благодарность….

2 ответа

Вот простой код для создания папки на SD-карте

// create a File object for the parent directory
File newFolder = new File("/sdcard/newFolder/");
// have the object build the directory structure, if needed.
newFolder.mkdirs();
// create a File object for the output file
File outputFile = new File(newFolder, filename);
// now attach the OutputStream to the file object, instead of a String           
FileOutputStream fos = new FileOutputStream(outputFile);

Разрешение в файле манифеста

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


0

hatib abrar
5 Окт 2016 в 14:24

Проблема в том, что вы используете API 23 и 24 (Marshmallow). Google изменил стратегию разрешений с API 23. Уменьшите целевую версию до 22. Это сработает. Если вы хотите 23 или 24, включите код для запроса разрешения во время выполнения.


0

Ruthwik Warrier
5 Окт 2016 в 15:06

Использую андроид API16. С начала для получения пути к SD карте использовал следующий код sdDir = Environment.getExternalStorageDirectory();, но мне возвращался путь к внутренней SD. После этого переделал получение пути через файл «/proc/mounts». Путь стал получать правильный. При создании файла
File aaa = new File(getSDcardPath()+"/aaa.txt");
ни каких ошибок не возникает. Но как только я создаю поток
FileOutputStream out = new FileOutputStream(aaa);
для записи данных в файл срабатывает исключение FileNotFoundException. После этого попробовал просто создать папку, тоже ни ошибок, ни исключений не появляется. Но и папка не создается. В манифесте прописал следующие разрешения

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

Может кто уже сталкивался с этой проблемой и нашел решение. Помогите пожалуйста, а то это вроде последняя проблема которая осталась.P.S. Чтением с карта памяти без проблем, все работает

Ничто так не раздражает перфекциониста, как отсутствие порядка. Он должен быть везде, в том числе на смартфоне. Только представьте, если у вас по рабочему столу разбросаны иконки приложений, а в проводнике уже тысячи файлов, то как найти нужную фотографию или, например, документ? Сделать это практически невозможно, если ранее вы не позаботились о создании папок. А ведь на каждом смартфоне есть возможность объединить группы файлов и приложений в отдельные каталоги для упрощенного доступа к ним. Поэтому сегодня мы ответим на все вопросы, связанные с папками на Андроид.

Папка на Андроид: как создать, удалить или скрыть. Папки на Андроид позволяют упорядочить информацию, которая хранится на вашем смартфоне. Фото.

Папки на Андроид позволяют упорядочить информацию, которая хранится на вашем смартфоне

Содержание

  • 1 Где в телефоне папки
  • 2 Какие папки в Андроиде
  • 3 Как создать папку на Андроиде
    • 3.1 Папка на рабочем столе Андроид
    • 3.2 Как создать альбом в галерее
  • 4 Как переименовать папку
  • 5 Как скрыть папку на Андроиде
  • 6 Как переместить папку в Андроиде
  • 7 Как найти папку на телефоне
  • 8 Как удалить папку

Где в телефоне папки

Доступ к папкам на телефоне Андроид осуществляется через приложение «Проводник», которое также может называться «Менеджер файлов» или просто «Файлы». Каталоги, содержащие в себе фото и видео, также отображаются в стандартной программе «Галерея». Ну а папки с приложениями вы можете найти на рабочем столе.

Где в телефоне папки. На вашем смартфоне приложение может называться иначе. Фото.

На вашем смартфоне приложение может называться иначе

Для доступа к каталогам с файлами не обязательно использовать предустановленный софт. В Google Play есть огромное количество альтернативных менеджеров, среди которых стоит выделить RS File или Total Commander. Если по каким-то причинам вас не устраивает стандартный проводник, воспользуйтесь сторонним ПО.

⚡ Подпишись на Androidinsider в Дзене, где мы публикуем эксклюзивные материалы

Какие папки в Андроиде

Даже если вы только-только включили свой новенький смартфон и открыли проводник, то обнаружите в нем стандартные папки Андроид. Как правило, в каталогах вроде «Boot» и «Android» содержатся системные файлы, которые нельзя удалять. Поэтому рекомендую для начала прочитать отдельный материал, прежде чем прикасаться к таким папками.

Также по мере использования смартфона система автоматически создаст папки «DCIM» (здесь хранятся фото и видео, снятые на камеру), Pictures (изображения из различных приложений), «Music» (музыка), «Movies» (видео), «Download» (загрузки) и другие. К ним я тоже советую не прикасаться, а их содержимое можно беспрепятственно удалить, если появится такая потребность.

Как создать папку на Андроиде

Допустим, вам надоел беспорядок в проводнике, и вы решили разобраться, как создать папку на телефоне. Что для этого потребуется? А все очень просто. Действуйте по инструкции:

  1. Запустите менеджер файлов.
  2. Откройте корневую папку (внутренний накопитель или SD-карта).
  3. Нажмите кнопку в виде трех точек.
  4. Выберите опцию «Новая папка».
  5. Введите название каталога.
  6. Подтвердите его создание нажатием на кнопку «ОК».

Как создать папку на Андроиде. Папке можно присвоить любое имя. Фото.

Папке можно присвоить любое имя

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

Папка на рабочем столе Андроид

Также существуют папки на рабочем столе на телефоне. Некоторые из них (например, «Google») появляются автоматически. Но вы можете создать собственный каталог, отсортировав тем самым приложения. Вот, как создать папку на рабочем столе Андроид:

  1. Задержите палец на иконке приложения.
  2. Наведите его на ярлык второй программы.
  3. Программы автоматически преобразуются в папку, которой будет присвоено имя. Туда же можно поместить все остальные приложения.

Папка на рабочем столе Андроид. Повторите на своем смартфоне. Должно получиться. Фото.

Повторите на своем смартфоне. Должно получиться

Эта инструкция актуальна для большинства современных смартфонов вне зависимости от производителя, так что вы вряд ли столкнетесь с какими-то сложностями.

❗ Поделись своим мнением или задай вопрос в нашем телеграм-чате

Как создать альбом в галерее

«Галерея» — отдельное приложение, созданное для просмотра фото и видео. Обычно папки здесь создаются автоматически. Снимки попадают в каталог «Камера», а остальные картинки — во «Все фото». Также в разделе «Другие альбомы» вы найдете папки с изображениями и видеороликами, которые автоматически подтягиваются из проводника. А вот, как сделать альбом в галерее напрямую:

  1. Запустите приложение «Галерея» (может называться «Фото»).
  2. Откройте вкладку «Альбомы».
  3. Нажмите кнопку «+».
  4. Придумайте название альбома.
  5. Подтвердите его создание нажатием на кнопку «ОК».
  6. Выберите файлы, которые в него нужно добавить.

Как создать альбом в галерее. Возможно, для появления кнопки создания альбома в вашей галерее придется открыть меню через «три точки». Фото.

Возможно, для появления кнопки создания альбома в вашей галерее придется открыть меню через «три точки»

После этого наряду с другими каталогами отобразится только что созданный вами альбом.

Как переименовать папку

Любой созданный вами каталог с файлами или ярлыками приложений можно переименовать. Так, чтобы переименовать папку в проводнике, нужно задержать палец на выбранном каталоге, нажать кнопку «Еще», а затем — «Переименовать». То же самое касается изменения названий в галерее. Но в случае с папкой на главном экране ее сначала нужно открыть, а затем — тапнуть по текущему имени.

Как переименовать папку. Переименовать можно все, что угодно. Фото.

Переименовать можно все, что угодно

Как скрыть папку на Андроиде

Порой мы добавляем в папки на телефоне файлы, которые никто не должен увидеть. Чтобы обезопасить информацию, Samsung, например, предлагает создать защищенную папку, о чем мы уже рассказывали. А владельцам устройств других производителей нужно разобраться, как скрыть папку на телефоне:

  1. Запустите проводник.
  2. Откройте меню изменения названия папки.
  3. Поставьте точку в самом начале.
  4. Сохраните изменения.

Как скрыть папку на Андроиде. Поставьте «.» перед названием папки в проводнике. Фото.

Поставьте «.» перед названием папки в проводнике

Теперь, чтобы найти папку, через меню проводника нужно выбрать опцию «Показывать скрытые файлы». Обратите внимание, что подобная фишка работает только в проводнике. На рабочем столе таким образом спрятать каталоги не получится. Однако есть инструкция, как скрыть альбом в галерее: просто выделите папку и нажмите кнопку «Скрыть».

🔥 Загляни в телеграм-канал Сундук Али-Бабы, где мы собрали лучшие товары с АлиЭкспресс

Как переместить папку в Андроиде

Созданными каталогами можно управлять, перемещая их из одного места в другое. Если операция выполняется в рамках одного смартфона, то переместить папку на Андроид можно через контекстное меню, вызываемое удержанием пальца на каталоге. Далее остается выбрать место назначения и нажать кнопку «Вставить». С альбомами такую операцию провернуть не получится, а папки с приложениями можно перемещать только по пространству рабочего стола.

Как переместить папку в Андроиде. Перемещать можно в том числе скрытые папки. Фото.

Перемещать можно в том числе скрытые папки

Как найти папку на телефоне

Скрывая и перемещая каталоги, вы можете свести на нет всю пользу папок, ведь их будет сложно найти. Если вы помните название — воспользуйтесь поисковой строкой проводника, указав имя полностью или частично. В противном случае придется искать каталоги и файлы, содержащиеся в них, через категории, представленные в проводнике.

Как найти папку на телефоне. Для поиска в проводнике предусмотрена специальная функция, а также разбивка по категориям. Фото.

Для поиска в проводнике предусмотрена специальная функция, а также разбивка по категориям

⚡ Подпишись на Androidinsider в Пульс Mail.ru, чтобы получать новости из мира Андроид первым

Как удалить папку

Сегодня мы очень подробно разобрали все действия, которые можно выполнять с папками на Android. Однако не лишним будет также отметить, как удалить папку на телефоне. Для этого нужно задержать палец на иконке каталога и нажать соответствующую кнопку. Что касается папок на рабочем столе Андроид, то они удаляются путем обратного перемещения приложений в свободную область главного экрана. Как только вы уберете последний ярлык, каталог исчезнет.

Как удалить папку. В проводнике и на рабочем столе папки удаляются по-разному. Фото.

В проводнике и на рабочем столе папки удаляются по-разному

Будьте очень внимательны, избавляясь от каталогов, чьи названия видите впервые. Один из них может оказаться системным компонентом, а его удаление, скорее всего, приведет к непоправимым последствиям. Однако без подобных проблем можно удалить папку Другое, о чем мы тоже рассказывали.

Tonight I am currently having issues doing something that I thought would be simple… making a folder in /mnt/sdcard.

I have set the follow permission:

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

My Main.java has the following to make the folder:

public class Main extends TabActivity {
    static int index = 1;
    private static final String TAG = "Main";       

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        File folder = new File(Environment.getExternalStorageDirectory () + "/tallgrass/images");
        boolean success = false;
        if(!folder.exists()){
            success = folder.mkdir();
        }
        if (!success){ 
            Log.d(TAG,"Folder not created.");
        }
        else{
            Log.d(TAG,"Folder created!");
        }
    }

I get the «Folder created!» message in my log but when I check both /mnt/sdcard and /sdcard neither one has the folder. I have tried calling:

Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())

and it returns true. I just can’t figure this one out because all signs are pointing that it should work. I have also tried it with the phone disconnected from the PC in case the SD card was mounting or something as I am currently using my phone instead of the emulator for developing. Speaking of which, does debuggable to true maybe prevent it from making the folder?

Thanks!

Recently I read about folder creation in android and try to implement it in my app. Function should makes dir if it didn’t exist, download file from webserver and unzip it. But app can’t create folder on external device. Code of the function

public static void download(final int section){
    File folder = new File(Environment.getExternalStorageDirectory(), "/try2think"); //section"+section);
    if (!folder.exists()) {
        if(!folder.mkdirs()) {
            Log.i("Problem", "Problem creating folder");
        }
    }
    File folder1 = new File(Environment.getExternalStorageDirectory()+"/try2think", "section"+section);
    if (!folder1.exists()) {
        if(!folder1.mkdirs()) {
            Log.i("Problem", "Problem creating folder");
        }
    }
    String downloadURL = "http://jangofetthd.me/rebus/section" + section+".zip";
    final String directory = Environment.getExternalStorageDirectory()+"/try2think/section"+section+"/section"+section+".zip";
    Ion.with(Sections.context).load(downloadURL).write(new File(directory))
            .setCallback(new FutureCallback<File>() {
                @Override
                public void onCompleted(Exception e, File file) {
                    try {
                        UnzipFile(new File(directory), new File(Environment.getExternalStorageDirectory()+"/try2think/section"+section));
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            });
}

What is wrong? I have tryed varient withFile folder = new File(Environment.getExternalStorageDirectory()+"/try2think/section"+section);But it also didn’t work. What am I doing wrong?

Android не удалось создать папку

Вот причины, по которым я столкнулся

1. Нет приложения разрешения, это очень просто, добавьте приложение разрешения в файл manifect.xml

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

2. Версия Android выше 6.0, после 6.0 многим мобильным телефонам необходимо динамически запрашивать разрешения. Недостаточно настроить это в файле.

    // Разрешение динамического приложения
    private void getPrimission() {
        PackageManager pm = getPackageManager();
        boolean permission = (PackageManager.PERMISSION_GRANTED ==
                pm.checkPermission("android.permission.CAMERA", "com.zhengyuan.emcarsend"));
        if (permission) {
                         // "Есть это разрешение"
        } else {
                         // «Нет такого разрешения»
                         // Если версия Android больше или равна 6.0, разрешение необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.CAMERA}, 15);
            }
        }
        permission = PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.WRITE_EXTERNAL_STORAGE", "com.zhengyuan.emcarsend");
        if (permission) {
                         // "Есть это разрешение"
                         //Toast.makeText(Carout.this, "имеет разрешение", Toast.LENGTH_SHORT) .show ();
        } else {
                         // "Дерево имеет это разрешение"
                         // Если версия Android больше или равна 6.0, разрешения необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 15);
            }
        }
        permission = PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_EXTERNAL_STORAGE", "com.zhengyuan.emcarsend");
        if (permission) {
                         // "Есть это разрешение"
                         //Toast.makeText(Carout.this, "имеет разрешение", Toast.LENGTH_SHORT) .show ();
        } else {
                         // "Дерево имеет это разрешение"
                         // Если версия Android больше или равна 6.0, разрешения необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 15);
            }
        }
    }

В приведенном выше примере есть разрешения на чтение и запись для камеры и места для хранения.

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

Кстати,

Я столкнулся с этой проблемой, когда делал снимки. Я продолжал снимать и не мог создавать папки.

Одна из причин — создание многоуровневых каталогов,

Другой — отчет об ошибке 7.0, доступный за пределами приложения через ClipData.Item.getUri ().

Вы можете обратиться кhttps://blog.csdn.net/qq_23179075/article/details/70314473,

Мой телефон разработки — Nexus 5, работает Android 4.4.2.

В моем приложении я пытаюсь создать папку на внешнем хранилище, которая будет хранить отладочную информацию для моего приложения. В основном он будет содержать все команды, выполняемые приложением, поэтому, когда пользователь сталкивается с проблемой, у меня есть возможность отправить мне информацию из папки отладки для анализа.

Я начал, пытаясь записать файл в папку, но обнаружил, что возникла ошибка при создании папки. Сначала я использовал mkdir(), затем перешел на mkdirs(), который также не работал.

У меня есть <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> в моем манифесте.

Вот код для создания папки:

    File folder = new File(Environment.getExternalStorageDirectory() + "/DebugData");

    String path = folder.getPath();

    if(!folder.mkdirs() || !folder.exists()){        
            Log.e(LOG_TAG, path + " failed");
        } else {
            Log.d(LOG_TAG, path + " succeeded");
        } 

Вот что я также пробовал:

    //Check SD card state
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) {
        Log.e(LOG_TAG, "Error: external storage is read only or unavailable");
    } else {
        Log.d(LOG_TAG, "External storage is not read only or unavailable");
    }

Это возвращает, что внешняя память не доступна только для чтения или недоступна.

Я также пробовал разные пути, такие как File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Folder1");

Вот где это стало действительно запутанным.

Я пробовал разработку на разных телефонах. Во-первых, я схватил Galaxy S4 GT-i9505 running Android 4.2.2, и он сработал. Мне удалось создать папки и написать им. Это показало мне, что код работает. Также путь, возвращаемый при запуске кода на S4 и Nexus 5, был таким же.

Тогда я подумал, что это может быть версия для Android. Поэтому я схватил Nexus 4 с Android 4.4.2, и код тоже работал над ним. Создал папки и разрешил мне писать им.

Ни один из телефонов не укоренен и не является стандартным. Там нет специальных приложений или чего-либо, что я могу думать о настройках на Nexus 5, которые могут вызвать проблемы с разрешениями. Соединение установлено на Media Device (MTP).

EDIT:

Я должен добавить, что я попробовал следующее, которое также не сработало:

  • Запись файла в корневой каталог внешнего хранилища
  • Создание файла в корневом каталоге внешнего хранилища и его запись
  • Создание папки в выделенном пути и запись в нее файла
  • Создание файла в указанном пути и его записи

Я запутался в том, что вызывает это, есть ли что-нибудь еще, что я могу проверить или изменить, чтобы исправить проблему?

ИЗМЕНИТЬ 2:

Оказывается, проблема возникла из-за, я думаю, индексации.

В основном все другие устройства, на которых я тестировался, позволили мне снова подключить USB-соединение и просмотреть созданные файлы и папки.

По какой-то причине мой Nexus 5 не индексирует папки/файлы, даже если они существуют.

Я загрузил другое стороннее приложение-проводник файлов и заметил, что все папки и файлы были там.

Итак, чтобы просматривать эти папки и файлы с помощью USB-отладки, я должен перезагрузить телефон, чтобы повторно проиндексировать их, что кажется довольно раздражающим, но это лучше, чем он вообще не работает.

Спасибо.

Понравилась статья? Поделить с друзьями:
  • Ошибка солярис p0106
  • Ошибка создания объектов inpas pulsar connector
  • Ошибка создания объекта tsrvmethodclass
  • Ошибка соленоида шевроле лачетти
  • Ошибка соленоида субару