2015-11-11 2 views
0

У меня проблема с функцией mkdirs. См мои разрешения манифестаmkdirs() return false with write external permission

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
package="xxxxxx" 
android:versionCode="15" 
android:versionName="3.1.1508"> 

<!-- Global permissions --> 
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

И мой код

String APP_PATH_SD_CARD = "/xxxxx"; 
    String fullPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + APP_PATH_SD_CARD; 

    if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){ 
     ToastDressmup.make(this, "External SD card not mounted", 0, ToastAction.CLOSE.getValue()).show(); 
    } 

    try { 
     File dir = new File(fullPath); 
     if (!dir.exists()) { 
      dir.mkdirs(); 
     } 

     ==> My file doesn't exist 

SD карта установлена. Я не понимаю. Я читал очень ответы в Интернете, но это все еще неправильно.

Я был протестирован на эмуляторе (с эмулированным SD-картой) и на Nexus 5, это не работает. На моем HTC One X это работа, почему?! I'me отчаянно

Спасибо вам всем! G.

+0

Возможный дубликат [mkdirs возвращает ложь для каталога на сд карту в то время как родительский каталог доступен для записи] (http://stackoverflow.com/questions/4062357/mkdirs-returns-false-for-directory- on-sd-card-while-the-parent-directory-is-writ) – Henry

+0

Thx! Но их решения не устраняют мою проблему :(Я тестировал mkdirs(), mkdir в каждом каталоге, с эмулятором или без него. У меня больше нет идей :( – user5551022

+0

Если вы используете Android6, проверьте ответ easyspeek здесь. изменилась обработка разрешений. –

ответ

1

Как было решено в комментариях, ответ заключается в том, что разрешение отсутствовало.

С Android 6 обращение разрешение изменилось, как указано:

Exception 'open failed: EACCES (Permission denied)' on Android

или

Android permission doesn't work even if I have declared it

Вы должны собрать эти разрешения во время выполнения снова:

Цитата из первого ответа:

/** 
* Checks if the app has permission to write to device storage 
* 
* If the app does not has permission then the user will be prompted to grant permissions 
* 
* @param activity 
*/ 
public static void verifyStoragePermissions(Activity activity) { 
    // Check if we have write permission 
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

    if (permission != PackageManager.PERMISSION_GRANTED) { 
     // We don't have permission so prompt the user 
     ActivityCompat.requestPermissions(
       activity, 
       PERMISSIONS_STORAGE, 
       REQUEST_EXTERNAL_STORAGE 
     ); 
    } 
}