Не имеет доступа к внешнему хранилищу в API-29 - PullRequest
0 голосов
/ 25 февраля 2020

Следующий код хорошо работает в нижнем API-29. Но при использовании API-29 он запрещает доступ к внешнему хранилищу.

public void persistFile(byte[] bytes, String path, String fileName) throws IOException {
    OutputStream fOut = null;
    File picDirectory = new File(path);
    File file = new File(path, fileName); 
    fOut = new FileOutputStream(file);
    fOut.write(bytes); 
    fOut.flush();  
    fOut.close();  
}

AndroidManifest. xml

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

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

В Android 10 путей к файлам вне частных каталогов вашего приложения по умолчанию бесполезны, вы можете временно включить requestLegacyExternalStorage до Android 11 (который теперь отсутствует в режиме предварительного просмотра)

См. https://developer.android.com/training/data-storage

В дальнейшем, вероятно, лучше всего использовать Media Store или Storage Access Framework

https://developer.android.com/training/data-storage/shared

0 голосов
/ 25 февраля 2020

Можно использовать добавить android:requestLegacyExternalStorage="true" в тег приложения манифеста.

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