Android-приложение: mkdir() не работает в Google Nexus 7

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

Соответствующий код:

    // Create the storage directory if it does not exist
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdir()) {
            Log.d(TAG, "Oops! Failed create "
                    + Config.IMAGE_DIRECTORY_NAME + " directory");
            return null;
        }
    }

и в журнале написано: "Ой! Не удалось создать userImages".

Что я уже пробовал:

  • тестирование приложения на Samsung Galaxy S3 mini с Android 4.1.2 и все заработало. (-> кажется, это зависит от устройства)

  • Добавление разрешения
    < uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    в AndroidManifest.xml

  • использование mkdirs() вместо mkdir()

  • функция

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

    дает "Внешнее хранилище не только для чтения или недоступно".

Мой код:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.hbksaar.bubbles">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Кто-нибудь знает, почему я не могу создать эту папку?

2 ответа

Решение

Какую версию Android OS вы использовали? Если вы работаете на Android 6.0, возможно, из-за того, что у вашего приложения нет разрешения на хранение, перейдите в " Настройки" -> " Приложения" -> " Ваше приложение" -> " Разрешения", чтобы дважды проверить, что у вашего приложения есть разрешение на хранение. Предоставить разрешение на хранение, если оно еще не предоставлено.

Попробуйте записать полный путь к mediaStorageDir, чтобы убедиться, что это правильный путь на SD-карте.

Также попробуйте использовать mkdirs() для создания несуществующих родительских каталогов.

Если версия андроида - зефир, то проверка разрешения является динамической.

Пожалуйста, используйте ContextCompat, чтобы проверить разрешение.

Другие вопросы по тегам