Redes Sociais
 Telegram  YouTube
Como criar uma simples câmera fotográfica em Kotlin
14 de outubro de 2019

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

package br.com.uware.camera

import android.Manifest
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import kotlinx.android.synthetic.main.activity_main.*

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.





Autor: Rodrigo Leutz

Desenvolvedor Web e Android ( Kotlin e Java )


Começando a programar na linguagem Kotlin – Parte 5

Nesse tutorial Começando a programar na linguagem Kotlin – Parte 5 vamos ver strings e intervalos para que assim seja possível entrar em laços.[...]

7 de fevereiro de 2020

Vídeo 11: Pegar endereço com o CEP Kotlin

Nesse Vídeo 11: Pegar endereço com o CEP Kotlin vou descrever como fazer a parte da programação assim você vai imprimir o endereço na tela.[...]

4 de janeiro de 2020

Vídeo 10: Pegar endereço com o CEP Kotlin

Nesse Vídeo 10: Pegar endereço com o CEP Kotlin vou descrever como fazer o layout do aplicativo para assim poder fazer a programação. Vou[...]

4 de janeiro de 2020