Как сохранить растровое изображение в хранилище в KOTLIN (Media.insertImage ==> insertImage устарел в Java, также Media.DATA ==> DATA устарел в Java)

В KOTLIN были протестированы все альтернативы, но растровое изображение не удалось сохранить на внешнее хранилище

Если я использую:

MediaStore.Images.Media.insertImage(this.contentResolver, file.absolutePath, file.name, file.name)

Затем я получил "insertImage устарел в Java"

Если я использую:

values.put(MediaStore.Images.Media.DATA, file.absolutePath) context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)

Затем я получил " ДАННЫЕ устарели в Java "

Также

Environment.getExternalStorageDirectory() устарела

Как решить эту проблему?


person Member    schedule 23.02.2020    source источник


Ответы (2)


Используйте insert() для получения uri. Откройте поток вывода для uri и сожмите в него растровое изображение. Андроид В?

person blackapps    schedule 23.02.2020
comment
Именно в Android Studio 3.5.3 я использовал эти коды, предоставленные Бао Леем в stackoverflow.com/questions/36624756/ (начинается с приватного развлечения saveImage()). @blackapps, спасибо. Не могли бы вы написать коды, я не понял вашего предложения - person Member; 23.02.2020
comment
Чтобы избежать getExternalStorageDirectory (поскольку он устарел), я помещаю val directory = File(this.applicationContext.getExternalFilesDir(null)?.absolutePath + имя_папки). НО, что нужно написать, чтобы решить проблему DATA is deprecated? - person Member; 23.02.2020
comment
Обратите внимание на посты с тегом mediastore. Добавьте такой тег к своему сообщению, пожалуйста. - person blackapps; 23.02.2020
comment
Вот пример: stackoverflow. ком/вопросы/59991109/ - person blackapps; 23.02.2020
comment
Спасибо, но, в отличие от примера, здесь нет URL вида https://httpbin.org/image. Пользователи обрезают изображения, а затем сохраняют их на внешние хранилища. Что можно поставить вместо этого URL? - person Member; 23.02.2020
comment
Этот кусок вам, конечно, не нужен. У вас есть растровое изображение. Теперь прочитайте мой ответ еще раз. И вы так и не сказали, если вы на Android Q. Упоминать Android Studio нет смысла. - person blackapps; 23.02.2020
comment
Извините, но я новичок и не знаю, как узнать, Android Q или нет? Я вижу только его версию из вкладки "Помощь" - person Member; 23.02.2020
comment
Тогда что вы видите на этой вкладке? - person blackapps; 23.02.2020
comment
Android Studio 3.5.3 Build #AI-191.8026.42.35.6010548, собранная 15 ноября 2019 г. JRE: 1.8.0_202-release-1483-b03 amd64 JVM: 64-разрядная виртуальная машина OpenJDK Server от JetBrains s.r.o Windows 10 10.0 - person Member; 23.02.2020
comment
Вместо этого посмотрите в build.gradle (Module app) файле. - person blackapps; 23.02.2020
comment
И есть разница, для какой версии Android вы разрабатываете и какая версия Android работает на вашем устройстве или эмуляторе. - person blackapps; 23.02.2020
comment
Когда я смотрю на файл build.gradle уровня модуля, я вижу версию buildscript для kotlin как ext.kotlin_version = '1.3.41' и зависимости. - person Member; 23.02.2020
comment
Спасибо. Изображение загружено. Но есть ошибка времени выполнения: не найден класс android.provider.MediaStore$Downloads по пути: DexPathList[[zip файл /data/app/com.example.MyApp1-VBKZXuhcU730d_pAAr65Pg==/base.apk],nativeLibraryDirectories= [/data/app/com.example.MyApp1-VBKZXuhcU730d_pAAr65Pg==/lib/arm64, /data/app/com.example.MyApp1-VBKZXuhcU730d_pAAr65Pg==/base.apk!/lib/arm64-v8a, /system/lib64 ]] - person Member; 24.02.2020
comment
Образ загружается в Phone›Android›Data›com.example.MyApp1›files›MyFiles. Но я не смог найти решение этой ошибки времени выполнения в этой строке ==> this.applicationContext.contentResolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues). Почему он не нашел класс android.provider.MediaStore$Downloads по пути: DexPathLis? - person Member; 24.02.2020
comment
Пожалуйста, опубликуйте свой полный код. В вашем посте. Не в качестве комментария. Также опубликуйте трассировку стека в своем сообщении. Ты сделал все это нечитаемым. - person blackapps; 24.02.2020

Если вы хотите по-настоящему понять, что вам нужно, посмотрите здесь.
Но если вы беспокоитесь, что Environment.getExternalStorageDirectory() устарело, вы можете использовать Environment.getRootDirectory() или Environment.getRootDirectory()

person i30mb1    schedule 23.02.2020
comment
Спасибо, я могу получить полный путь без использования getExternalStorageDirectory(). Проблема в том, что метод insertImage() устарел. Итак, я пытаюсь загрузить или сохранить альтернативными способами. Но я не сохранил и не загрузил его в KOTLIN. Помогите мне, пожалуйста - person Member; 23.02.2020