Android Q: file.mkdirs () возвращает false - PullRequest
0 голосов
/ 30 июня 2019

У нас есть приложение, которое использует внешнее хранилище для хранения некоторых временных файлов: изображений, двоичных данных. Код для этого работал в течение нескольких лет без больших изменений до недавнего времени. На Android Q это не работает:

File f = new File(Environment.getExternalStorageDirectory().toString() + File.separator + MainActivity.APP_DIR)
f.mkdirs();
// do sth with f

mkdirs теперь возвращает только false.

Требуется разрешение в манифесте:

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

Код отлично работает на предыдущих версиях Android. Есть ли какие-либо изменения системного уровня для этого типа доступа? Если да, то какой обходной путь?

1 Ответ

1 голос
/ 30 июня 2019

Произошло огромное изменение конфиденциальности в Android Q, введя Scoped Storage .

Начиная с Q beta 4, можно отказаться этой функции с помощью:

  • таргетинг на API 28 (или ниже)
  • с использованием атрибута манифеста requestLegacyExternalStorage:

<manifest ... >
  <!-- This attribute is "false" by default on apps targeting Android Q. -->
  <application android:requestLegacyExternalStorage="true" ... >
    ...
  </application>
</manifest>

* примечание Я не проверялэто, просто цитируя документы

...