Tsudzukeru
@Tsudzukeru

Почему файл не соххраняется в External Storage?

Изучаю хранение данных в Android по книге Saving Data on Android от raywenderlich.
В их примере используется методы вот такого репозитория.

class ExternalFileRepository(var context: Context) :
    NoteRepository {

  override fun addNote(note: Note) {
    if (isExternalStorageWritable()) {
      FileOutputStream(noteFile(note.fileName)).use { output ->
        output.write(note.noteText.toByteArray())
      }
    }
  }

  override fun getNote(fileName: String): Note {
    val note = Note(fileName, "")
    if (isExternalStorageReadable()) {
      FileInputStream(noteFile(fileName)).use { stream ->
        val text = stream.bufferedReader().use {
          it.readText()
        }
        note.noteText = text
      }
    }
    return note
  }

  override fun deleteNote(fileName: String): Boolean {
    return isExternalStorageWritable() && noteFile(fileName).delete()
  }

  private fun noteDirectory(): File? = context.getExternalFilesDir(null)

  private fun noteFile(fileName: String): File = File(noteDirectory(), fileName)

  fun isExternalStorageWritable(): Boolean {
    return Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED
  }

  fun isExternalStorageReadable(): Boolean {
    return Environment.getExternalStorageState() in
        setOf(Environment.MEDIA_MOUNTED, Environment.MEDIA_MOUNTED_READ_ONLY)
  }

}


Разрешение в манифесте
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


Проблема в том, что файл не сохраняется по пути sdcard/data/app_name, да и вообще никуда не сохраняется.
смартфон - Meizu m8, Android 8.1 Oreo
В чем может быть проблема?

Метод isExternalStorageWritable() возвращает true, и код записи файла отрабатывает.
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 1
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
Нужно запросить пермишен у пользователя
https://developer.android.com/guide/topics/permiss...
https://source.android.com/devices/tech/config/run...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы