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) {
            }
        }
    }
Другие вопросы по тегам