2017-01-25 4 views
-1

Я пытаюсь создать файл или каталог в android по приведенному ниже коду, но всегда его результаты «Directory not created».Ошибка при создании файлов в android

Первый метод, возвращающий «истина», что означает, что доступно внешнее хранилище.

I'v попробовал все примеры и команды в документации android here, и все они не работали.

Кроме того, я включил разрешение в Манифесты следующим образом:

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

Код:

public void createWorkbook(String fileName){ 
     boolean CheckSDcard = isExternalStorageWritable(); 
     if (!CheckSDcard){ 
      Toast.makeText(ReportsPage.this, "SDCard not available", Toast.LENGTH_SHORT).show(); 
     } 
     getStorageDir(fileName); 
    } 

    public File getStorageDir(String FileName) { 

     File file = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), FileName); 
     if (!file.mkdirs()) { 
      Log.e(LOG_TAG, "Directory not created"); 
     } 
     return file; 
    } 

    /* Checks if external storage is available for read and write */ 
    public boolean isExternalStorageWritable() { 
     String state = Environment.getExternalStorageState(); 
     if (Environment.MEDIA_MOUNTED.equals(state)) { 
      return true; 
     } 
     return false; 
    } 

Примечание: эмулятор «Nexus 5» и версия программного обеспечения 7.0 "Нугат".

Его немного запутывает, потому что почти все команды работают нормально и возвращают запрошенный путь, но при создании файла и проверке его на «mkdirs() или mkdir()» его возвращающее значение false, а URI - «NULL».

Кроме того, я проверил приложение на реальном устройстве «HUAWEI Mate 8» с Android версии 6.0 и дал те же результаты.

Любая помощь будет оценена, спасибо.

+0

'если (! File.mkdirs())'. Вызывайте mkdirs только в том случае, если каталог не существует. Если mkdirs не удается, вы должны вернуть 'null', поэтому вызывающее приложение знает, что его нет. Примените свой код. – greenapps

+0

'void createWorkbook'. Пустота? Сделайте его логической функцией, которая сообщает вам, есть ли у вас каталог или нет. – greenapps

+0

mkdirs() возвращает true только в том случае, если каталог был создан командой. Я бы написал отдельный чек, чтобы узнать, существует ли он на самом деле. Вы уверены, что каталог не существует? –

ответ

1

разрешение выполнения Добавить для Android 6 или выше

//try adding this code on activity creation 
int PERMISSION_ALL = 1; 
     String[] PERMISSIONS = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}; 

     if (!hasPermissions(this, PERMISSIONS)) { 
      ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL); 
     } 

//method hasPermissions for checking if already has permission 

public static boolean hasPermissions(Context context, String... permissions) { 
     if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { 
      for (String permission : permissions) { 
       if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
        return false; 
       } 
      } 
     } 
     return true; 
    } 
+0

В качестве теста убедитесь, что разрешение «Хранение» отключено в «Настройки> Приложения> ваше приложение> Разрешения» и просто включите его с помощью приведенный выше код отключен, чтобы определить, было ли это разрешение. – Frank

+0

спасибо, я попробовал ваш код и принял разрешение. Кроме того, я использовал «if (file.exists()) и возвращал true. Но каталог загрузки пуст. Как мне найти созданный файл? –

+0

Все еще не работает, какие-либо решения? –

Смежные вопросы