Я использую коды, данные Бао Лейем с именем личное удовольствие saveImage в как сохранить растровое изображение в android галерее , чтобы сохранить растровое изображение
Решить Устарел проблемы в Kotlin, я удалил эти строки:
//values.put(MediaStore.Images.Media.DATA, file.absolutePath)
//context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
и добавил это:
val contentValues = ContentValues()
contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, folderName)
this.applicationContext.contentResolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues)
Затем я вызвал функцию (в DidtodayActivity) как:
saveImage(bitmapImg, this.applicationContext)
Изображение загружается в Телефон> Android> Данные> com.example.MyApp1> files> MyFiles . Я вижу загруженное изображение на моем устройстве.
Но файл активности внезапно закрывается (и activity_main . xml открывается напрямую) из-за ошибки runTime в этой строке:
this.applicationContext.contentResolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues)
Причина :
java.lang.ClassNotFoundException: Didn't find class "android.provider.MediaStore$Downloads" on path: DexPathList[[zip file "/data/app/com.example.MyApp1-rvQQjSAj4NilLch2h12faQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.MyApp1-rvQQjSAj4NilLch2h12faQ==/lib/arm64, /data/app/com.example.MyApp1-rvQQjSAj4NilLch2h12faQ==/base.apk!/lib/arm64-v8a, /system/lib64]]
Подробное сообщение:
**Didn't find class "android.provider.MediaStore$Downloads"** on path: DexPathList[[zip file "/data/app/com.example.MyApp1-rvQQjSAj4NilLch2h12faQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.MyApp1-rvQQjSAj4NilLch2h12faQ==/lib/arm64, /data/app/com.example.MyApp1-rvQQjSAj4NilLch2h12faQ==/base.apk!/lib/arm64-v8a, /system/lib64]]
Не удалось разрешить: Landroid / provider / MediaStore $ Загрузки;
Уровень модуля build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.MyApp1"
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
aaptOptions{
noCompress "tflite"
noCompress "lite"
}
}
Кроме того, следующий код был добавлен в часть зависимостей в файле build.gradle:
implementation "com.android.support:multidex:2.0.1"
И я добавил этот код в файл манифеста:
android:name="androidx.multidex.MultiDexApplication">
Как решить проблему с ошибкой во время выполнения ?
Я пробовал это;
this.applicationContext.contentResolver.insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
вместо этого;
this.applicationContext.contentResolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues)
Но он снова вылетает с этой ошибкой во время выполнения;
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=203, result=-1, data=Intent { (has extras) }} to
activity {com.example.MyApp1/com.example.MyApp1.DidtodayActivity}: java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri
content://media/external/images/media from pid=3812, uid=10270
requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
Однако следующий код уже находится в файле манифеста:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Итак, есть ли какая-либо другая альтернатива для использования вместо MediaStore.Downloads ? * 107 0 *