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.
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>
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>
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.
Tags:
Galery ImageView Kotlin Permissão de leitura registerForActivityResultPosts relacionados: