Como criar uma simples câmera fotográfica em Kotlin
Android Kotlin

Como criar uma simples câmera fotográfica em Kotlin



Nesse tutorial vou descrever Como criar uma simples câmera fotográfica em Kotlin para que tire uma foto e exiba em um campo de ImageView de uma forma bem simples.

Assim sendo usada a biblioteca MediaStore do android.

Como criar uma simples câmera fotográfica em Kotlin

Primeiramente vamos começar criando um projeto vazio(Empty).

Depois vamos fazer umas mudanças no gradle no nivel de app adicionando a seguinte linha para utilizar o material design colocando um Floating Action Button.

gradle/app

dependencies {
    ...
    implementation 'com.google.android.material:material:1.1.0-alpha10'
}

Vamos sincronizar o gradle para que ele inclua as bibliotecas do material design.

Logo após adicionarmos no gradle o material design vamos também adicionar no Manifest as permissões necessárias para poder executar a câmera. Insira as seguintes linhas acima da parte de application.

AndroidManifest

<uses-permission android:name="android.permission.CAMERA"/>

Assim que tiver adicionado nossas linhas no gradle e no Manifest portanto podemos começar a programar e fazer com que nosso aplicativo bata fotos e as imprima em uma ImageView.

As fotos que são tiradas dessa maneira são de uma qualidade para miniaturas.

Se for necessário de uma qualidade maior então de uma olhada em EXTRA_OUTPUT.

Assim sendo vamos a nossos blocos de programação para fazer a mágica acontecer.

activity_main

<?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/imgPhoto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        app:layout_constraintTop_toTopOf="parent"/>
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/btnTakePhoto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:src="@drawable/ic_camera"
        app:backgroundTint="#0000FF"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity

class MainActivity : AppCompatActivity() {
    private var check: Boolean = false
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        initPermissions()

        btnTakePhoto.setOnClickListener {
            if(check) {
                val intent = Intent("android.media.action.IMAGE_CAPTURE")
                startActivityForResult(intent, 0)
            }
            else{
                Toast.makeText(this, "Não tem permissão para usar a câmera.", Toast.LENGTH_SHORT).show()
            }
        }
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (data != null && requestCode == 0 && resultCode == Activity.RESULT_OK) {
            val bundle: Bundle? = data.extras
            if (bundle != null) {
                val bitmap = bundle.get("data") as Bitmap
                imgPhoto.setImageBitmap(bitmap)
            }
        }
    }
    // Permissions
    private fun initPermissions(){
        if(!getPermission()) setPermission()
        else check = true
    }
    private fun getPermission(): Boolean{
        return (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)
    }
    private fun setPermission(){
        val permissionsList = listOf<String>(
            Manifest.permission.CAMERA
        )
        ActivityCompat.requestPermissions(this, permissionsList.toTypedArray(), 1)
    }
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        when(requestCode){
            1 -> {
                if (grantResults.isEmpty() || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                    Log.i("Permission: ", "Permission has been denied by user")
                    Toast.makeText(this, "Não tem permissão para usar a câmera.", Toast.LENGTH_SHORT).show()
                } else {
                    Log.i("Permission: ", "Permission has been granted by user")
                    check = true
                }
            }
        }
    }
}




Veja também Como organizar itens no layout em XML.

Rodrigo Leutz
Desenvolvedor Web e Android ( Kotlin e Java )
https://www.uware.com.br