Android Как создать новый фотоальбом и добавить его в телефонную галерею по умолчанию в Code
У меня есть приложение, назовем его FilterAppX, оно в основном позволяет загружать изображение, и я буду настраивать его, скажем, добавляя к нему цветок или какие-то глупые предметы.
Теперь после обработки изображения я его сохраню. Я хочу иметь возможность создавать фотоальбом для приложения "Галерея" по умолчанию, которое поставляется со всеми телефонами Android, поэтому для Galaxy S2, например, есть приложение (не загруженное из appStore, оно поставляется вместе с телефоном) под названием "Галерея", который позволяет выбирать множество различных изображений, которые вы сделали с помощью телефона, либо прямо с камеры, либо с экрана, либо с
так что-то вроде скриншота ниже
так как вы можете видеть, это снимок экрана с телефона Android по умолчанию на Galaxy S2
Я скачал некоторые другие приложения, и он создает свой собственный альбом с именем приложения, так что я знаю, что это возможно, и я пытаюсь сделать то же самое, в основном я хочу папку с именем "FilterAppX", в которой есть фотографии, сделанные моим карта
Как я могу это сделать?
2 ответа
Вы просто создаете свою собственную папку, в которой есть фотографии, сделанные "FilterAppX".
В случае вас, каталог "~/sdcards/FilterAppX".
Вам необходимо создать каталог в папке изображений во внутреннем хранилище, а затем сохранить изображения в этой папке, чтобы они были видны в приложении «Галерея». Вы можете легко сделать это с помощью MediaStore.
Примечание. Приведенный ниже код предназначен для устройств с Android Q и более поздних версий.
suspend fun saveImage(bitmap: Bitmap)
{
withContext(Dispatchers.IO) {
try {
val collection = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
}else
{ MediaStore.Images.Media.EXTERNAL_CONTENT_URI}
val dirDest = File(
Environment.DIRECTORY_PICTURES,
context.getString(R.string.app_name)
)
val date = System.currentTimeMillis()
val fileName = "$date.${IMAGE_EXTENSIONS}"
val contentValues = ContentValues().apply {
put(MediaStore.Images.Media.DISPLAY_NAME, fileName)
put(MediaStore.MediaColumns.MIME_TYPE, "image/$IMAGE_EXTENSIONS")
put(MediaStore.MediaColumns.DATE_ADDED, date)
put(MediaStore.MediaColumns.DATE_MODIFIED, date)
put(MediaStore.MediaColumns.SIZE, bitmap.byteCount)
put(MediaStore.MediaColumns.WIDTH, bitmap.width)
put(MediaStore.MediaColumns.HEIGHT, bitmap.height)
put(MediaStore.MediaColumns.RELATIVE_PATH, "$dirDest${File.separator}")
put(MediaStore.Images.Media.IS_PENDING, 1)
}
val imageUri = context.contentResolver.insert(collection, contentValues)
withContext(Dispatchers.IO) {
imageUri?.let { uri ->
context.contentResolver.openOutputStream(uri, "w").use {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, it)
}
contentValues.clear()
contentValues.put(MediaStore.Images.Media.IS_PENDING, 0)
context.contentResolver.update(uri, contentValues, null, null)
}
}
} catch (e: FileNotFoundException) {
}
}
}