Я могу сохранить фотографию в таблице mediastore.images.media, и я вижу ее с помощью приложения Files, но когда я пытаюсь получить фотографию, запрос возвращается пустым. Моя версия API 34. < /p>
< /code>
SavePhoto ниже работает, но GetPoto возвращает пустое < /p>
suspend fun savePhoto(imageBitmap: ImageBitmap, photoName: String, reportName: String) {
withContext(Dispatchers.IO) {
val resolver = appState.contentResolver
val imageCollection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
val timeInMillis = System.currentTimeMillis()
val cv = ContentValues().apply {
put(MediaStore.Images.Media.DISPLAY_NAME, photoName)
put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
put(MediaStore.Images.Media.DATE_TAKEN, timeInMillis)
put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + "/" + reportName)
put(MediaStore.Images.Media.IS_PENDING, 1)
}
val imageMediaStoreUri = resolver.insert(imageCollection, cv)
imageMediaStoreUri?.let { uri ->
try {
resolver.openOutputStream(uri)?.let { out ->
imageBitmap.asAndroidBitmap().compress(Bitmap.CompressFormat.JPEG, 100, out)
}
cv.clear()
cv.put(MediaStore.Images.Media.IS_PENDING, 0)
resolver.update(uri, cv, null, null)
} catch (e: Exception) {
resolver.delete(uri, null, null)
}
}
}
}
< /code>
fun getPhoto(reportName: String, photoName: String): ImageBitmap? {
Log.d("getPhoto", "ReportName: " + reportName + ", Photo: " + photoName)
var imageBitmap: ImageBitmap? = null
if (photoName.isNotEmpty() && reportName.isNotEmpty()) {
var contentUri: Uri? = null
val projection = arrayOf(MediaStore.Images.Media._ID, MediaStore.Images.Media.DISPLAY_NAME)
val selection ="${MediaStore.Images.Media.RELATIVE_PATH} = ? AND ${MediaStore.Images.Media.DISPLAY_NAME} = ?"
val selectionArgs = arrayOf(Environment.DIRECTORY_PICTURES + "/" + reportName, photoName)
val sortOrder = "${MediaStore.Images.Media.DISPLAY_NAME} ASC"
appState.contentResolver.query(
MediaStore.Images.Media.getContentUri(VOLUME_EXTERNAL_PRIMARY),
projection,
selection,
selectionArgs,
sortOrder
)?.use { cursor ->
cursor.moveToFirst()
try {
val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID)
val id = cursor.getLong(idColumn)
contentUri = ContentUris.withAppendedId(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id
)
} catch (e: Exception) {
Log.d("getPhoto", "Exception: " + e.message.toString())
}
}
if (contentUri != null) {
val options = BitmapFactory.Options()
options.inSampleSize = 2
appState.contentResolver.openInputStream(contentUri).use { stream ->
val photoAsBitmap = BitmapFactory.decodeStream(stream, null, options)
imageBitmap = photoAsBitmap?.asImageBitmap()
}
Log.d("getPhoto", "ContentUri: " + contentUri.toString())
}
}
return imageBitmap
}
< /code>
Why is the query returning empty? It does so in the emulator and on my phone when connected to android studio. No errors in Logcat. It's like the mediastore.images table is empty.
Подробнее здесь: https://stackoverflow.com/questions/795 ... ages-media