Buscando Imagens Android

Bylearner você quer aprender como fazer para buscar somente imagens no android?

Nesse post te mostro como fazer a busca de qualquer tipo de arquivo.
Vou mostrar duas formas de recuperar somente as imagens do seu dispositivo.

A primeira forma é deixar que o Android gerencie e mostre as imagens para o usuário.
no código abaixo vou mostrar como fazer a chamada para o android.

fun buscarImage,() {
        val intent = Intent(Intent.ACTION_GET_CONTENT)
        intent.type = "image/*"
        intent.addCategory(Intent.CATEGORY_OPENABLE)

        try {
            startActivityForResult(Intent.createChooser(intent, "Selecione o anexo"), REQUEST_CODE) //O REQUEST_CODE é um código INT que o desenvolvedor escolhe para mapear o retorno.
        } catch (e: ActivityNotFoundException) {
            Toast.makeText(this, "Não encontramos nenhum gerenciador de arquivos",
                    Toast.LENGTH_SHORT).show()
        }
    }

Tendo escolhido a imagem, agora precisamos saber como recuperar ele, então no código abaixo será mostrado como recuperar o endereço do arquivo.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
         super.onActivityResult(requestCode, resultCode, data)
         if (REQUEST_ATTACHMENT == requestCode && Activity.RESULT_OK == resultCode && data != null) {
             try {
                 val uri = data.data ?: throw IllegalAccessException()
                 //utilizar o arquivo
             } catch (th: Throwable) {
                 //tratar erro ao recuperar a URI
             }
         }
     }

E a segunda forma de recuperar as imagens é passar pelo disco verificando o que é imagem e separar para mostrar para o usuário.

Primeiro temos que criar uma classe para buscar as imagens

class BuscaImagens {
    companion object {
        val EXTENSIONS_IMAGES = arrayOf("jpeg", "jpg", "png", "tif", "tiff")
    }

    private val IMAGE_FILTER: FilenameFilter = object : FilenameFilter {
        override fun accept(dir: File, name: String): Boolean {
            for (ext in EXTENSIONS_IMAGES) {
                if (name.endsWith(".$ext")) {
                    return true
                }
            }
            return false
        }
    }

    fun execute(dir: File, returnList: ArrayList<File> = ArrayList()): ArrayList<File> {
        var list = dir.listFiles(IMAGE_FILTER)

        if (!list.isNullOrEmpty()) {
            for (f in list) {
                returnList.add(f)
            }
        }

        for (path in dir.listFiles()) {
            if (path.isDirectory){
                execute(path, returnList)
            }
        }
        return returnList
    }
}

Com a classe de filtro de imagens feita, basta buscarmos as imagens.

fun buscaImagem(base: File): List<File> {

        val findFiles = BuscaImagens()
        val files = findFiles.execute(base)

        val list = ArrayList<ObFileItemView>()

        for (file in files) {
            list.add(ObFileItemView(file))
        }

        list.sortByDescending {
            it.item.lastModified()
        }
        return list
    }

Deixe uma resposta