Записать файл в каталог загрузки на AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Записать файл в каталог загрузки на Android

Сообщение Anonymous »


Ниже мой код

Каталог загрузки файлов = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); длинный currentTimestamp = System.currentTimeMillis(); Строковое имя файла = "downloaded_image_" + currentTimestamp + ".png"; Файл imageFile = новый файл (каталог загрузок, имя файла); пытаться { FileOutputStream outputStream = новый FileOutputStream (imageFile); outputStream.write(imageBytes); выходной поток.закрыть(); } catch (FileNotFoundException e) { выдать новое RuntimeException(e); } catch (IOException e) { выдать новое RuntimeException(e); } Я добавил разрешения

Теперь мой приведенный выше код отлично работает на Android 12.

Но на Android 8 и Android 10 это не работает из-за ошибки

java.lang.RuntimeException: java.io.FileNotFoundException: /storage/emulated/0/Download/downloaded_image_1697897803982.png: ошибка открытия: EACCES (в разрешении отказано)

В Интернете мне сказали, что приведенный ниже код должен работать со всеми API (более 24), но не означает ли приведенный ниже код, что мой код не должен работать на Android 12 и работать на Android 8/9? Я не понимаю, как мой код (код выше) работает на Android 12, но не на 8/9, а ниже должен работать.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { StorageManager StorageManager = getSystemService(StorageManager.class); StorageVolume StorageVolume = StorageManager.getStorageVolumes().get(0); Каталог загрузки файлов = StorageVolume.getDirectory(Environment.DIRECTORY_DOWNLOADS); длинный currentTimestamp = System.currentTimeMillis(); Строковое имя файла = "downloaded_image_" + currentTimestamp + ".png"; Файл imageFile = новый файл (каталог загрузок, имя файла); пытаться { FileOutputStream outputStream = новый FileOutputStream (imageFile); outputStream.write(imageBytes); выходной поток.закрыть(); } catch (FileNotFoundException e) { выдать новое RuntimeException(e); } catch (IOException e) { выдать новое RuntimeException(e); } } еще { Каталог загрузки файлов = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); длинный currentTimestamp = System.currentTimeMillis(); Строковое имя файла = "downloaded_image_" + currentTimestamp + ".png"; Файл imageFile = новый файл (каталог загрузок, имя файла); пытаться { FileOutputStream outputStream = новый FileOutputStream (imageFile); outputStream.write(imageBytes); выходной поток.закрыть(); } catch (FileNotFoundException e) { выдать новое RuntimeException(e); } catch (IOException e) { выдать новое RuntimeException(e); } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»