Redes Sociais
 Telegram  YouTube
Como pegar imagem da galeria e visualizar no ImageView Kotlin
25 de abril de 2021

Neste tutorial vou demonstrar como pegar imagem da galeria e visualizar no ImageView utilizando a linguagem de programação Kotlin.

Bom pessoal este é um tutorial bem simples que vamos utilizar uma intent de ACTION_PICK de imagens.

E logo depois receber o resultado imprimindo o em uma ImageView.

Base

Primeiramente vamos criar um projeto vazio(Empty) para poder iniciar a programar com o nome de br.com.uware.imagemdagaleria .

Logo após ter criado o projeto vamos deixar o nosso gradle com o seguinte código para utilizarmos o viewBinding.

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "br.com.uware.imagemdagaleria"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    // ViewBinding
    buildFeatures {
        viewBinding true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}




Logo após ter deixado o gradle com o viewBinding vamos inserir as permissões de leitura em nosso arquivo do AndroidManifest.xml.

Então vamos deixar o código do AndroidManifest.xml com o seguinte código.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="br.com.uware.imagemdagaleria">

    <!-- Permissão de leitura -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.ImagemDaGaleria">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

User Interface(UI)

Com a base do projeto pronta vamos então começar a programar.

Vamos inserir agora o seguinte código em nosso arquivo de strings.xml para obter então o escrito do botão que irá abrir a intent.

Então vamos deixar o arquivo de strings.xml com o seguinte código.

<resources>
    <string name="app_name">Imagem da Galeria</string>

    <string name="select_image">Selecionar Imagem</string>
    <string name="no_permission">Não tem permissão para ler arquivos.</string>
</resources>




Estamos chegando ao final do projeto só faltam 2(dois) arquivos para editarmos.

Agora vamos editar o arquivo activity_main.xml para deixar o layout assim como precisamos.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/iv_image"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/btn"/>

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/select_image"
        app:layout_constraintBottom_toBottomOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Como pegar imagem da galeria e visualizar no ImageView Kotlin

Para finalizar o simples projeto vamos colocar todas as funções que vamos usar em um simples arquivo.

Portanto vamos finalizar o projeto editando a MainActivity.kt e deixar o código dela como o seguinte código.

package br.com.uware.imagemdagaleria

import android.Manifest
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Toast
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import br.com.uware.imagemdagaleria.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    // ViewBinding
    private lateinit var binding: ActivityMainBinding

    // Variável de chacagem de permissão
    private var check = false

    // Recebe resultados da intent de ACTION_PICK
    private val startImageResult = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ){ result: ActivityResult ->
        if (result.resultCode == Activity.RESULT_OK){
            binding.ivImage.setImageURI(result.data?.data)
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // Inicia pedido de permissão
        initPermissions()

        // Botão que abre a Intent.ACTION_PICK
        binding.btn.setOnClickListener {
            openGalleryForImage()
        }
    }

    // Abre Intent de ACTION_PICK
    private fun openGalleryForImage() {
        val intent = Intent(Intent.ACTION_PICK,
            MediaStore.Images.Media.INTERNAL_CONTENT_URI)
        startImageResult.launch(intent)
    }

    // Checa se existe ou não permissão
    private fun initPermissions(){
        if(!getPermission()) setPermission()
        else check = true
    }

    // Checa se existe permissão
    private fun getPermission(): Boolean =
        (ContextCompat.checkSelfPermission(
                this,
                Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)

    // Pede permissão se não tiver
    private fun setPermission(){
        val permissionsList = listOf<String>(
                Manifest.permission.READ_EXTERNAL_STORAGE
        )
        ActivityCompat.requestPermissions(this, permissionsList.toTypedArray(), PERMISSION_CODE)
    }

    // Envia mensagem por não ter permissão
    private fun errorPermission(){
        Toast.makeText(this, R.string.no_permission, Toast.LENGTH_SHORT).show()
    }

    // Recebe resultado do pedido de permissão
    override fun onRequestPermissionsResult(
            requestCode: Int,
            permissions: Array<out String>,
            grantResults: IntArray
    ) {
        when(requestCode){
            PERMISSION_CODE -> {
                if (grantResults.isEmpty() || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                    errorPermission()
                } else {
                    check = true
                }
            }
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }

    // Códigos dos pedidos
    companion object {
        private const val PERMISSION_CODE = 1
    }
}

Então agora é só compilar e rodar o projeto para ver como tudo ficou.

Se você deseja conhecer mais sobre intents entre no site do developers.android.com neste link.

Enfim espero poder ter ajudado com mais este tutorial sobre como pegar imagem da galeria e visualizar no ImageView Kotlin.





Autor: Rodrigo Leutz

Desenvolvedor Web e Android ( Kotlin e Java )


Como usar ROOM(SQLite) com kotlin no Android

Neste tutorial de como usar ROOM(SQLite) com kotlin no Android, escrevi esse pequeno aplicativo que apenas cria uma nota(tarefa) e tem um botão de[...]

20 de abril de 2021