Şimdi yükleniyor

Android Studio İzinler ve Örnek Kamera Uygulaması

Merhabalar. Bu dersimizde android stoudio da izinler konusunu işleyip, bununla ilgili kamera uygulaması yapacağız.

Dersimizin sonunda aşağıdaki ekranda görüldüğü gibi “Resim Çek” düğmesine tıklandığında öncelikle izin kontrolü yapıp eğer daha önce izin verilmemişse izin isteyip, eğer kullanıcı izin verdiyse cihazın kamerasına erişip çekilen resmi, ImageView nesnesine aktaracağız.

android-studio-izinler-png Android Studio İzinler ve Örnek Kamera Uygulaması

Uygulamamızı adım adım tasarlayıp kodlayalım.

1.Adım : Project ekranından app->manifest->AndroidManifest.xml yolunu izleyerek AndroidManifest.xml dosyamızı açalım.

<application komutunun üstüne <u yazdığımızda <uses-permission komutu çıkacaktır. Listeden bu komutu seçip,

android:name=”” tırnak arasına Kamera iznini isteyeceğimiz için CA yazdığımızda “android.permission.CAMERA” seçeneği çıkacaktır. Listeden bunu seçelim.

Komutumuzun son hali <uses-permission android:name=”android.permission.CAMERA”/> gibi olacaktır. Cihazda kamera yok veya bozuksa bu komutun başındaki kırmızı lambaya tıklayıp, ilk seçeneği seçerek bu komutun üstüne

<uses-feature
    android:name="android.hardware.camera"
    android:required="false" /> 
komutunn eklenmesini sağlayın. 
AndroidManifest.Xml dosyamızın son hali aşağıdaki gibidir. 

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

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />
    <uses-permission android:name="android.permission.CAMERA"/>
    
    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

 

2.Adım: Bu adımda uygulamamızın kullanıcı arayüzünü tasarlayacağız. activity_main.xml dosyasını açıp aktivity mize 1 adet Button ve ImageView ekleyip gerekli ayarları yapalım .

Butonun text özelliğine : “Resim Çek”, onclick özelliğine “resimcek” yazdık ve sayfamıza üstten ve sağ-soldan bağladık.

ImageView nesnemizi ekleyip id özelliğine :”resim” yazdık.
Tasarımımızın son hali aşağıdaki gibidir.

izinler-tasarim-png Android Studio İzinler ve Örnek Kamera Uygulaması

Tasarım sayfamızın kodları aşağıdadır.

 

<?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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="36dp"
        android:onClick="resimcek"
        android:text="Resim Çek"
        android:textSize="34sp"
        app:cornerRadius="5dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/resim"
        android:layout_width="341dp"
        android:layout_height="425dp"
        android:layout_marginTop="52dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button"
        tools:srcCompat="@tools:sample/avatars" />
</androidx.constraintlayout.widget.ConstraintLayout>

3.Adım:  Bu adımda uygulamamı için gerekli kodları yazacağız.

  • “public class MainActivity extends AppCompatActivity {” satırının altına uygulamada kullanacağımız değişkenleri aşağıdaki gibi tanımlıyoruz.private static final int resimkod=1; //kameraya erişim kodumuz.
    private ImageView resim; //kameradan çekilen resmi aktaracağımız nesnemiz.
  • bu tanımlamaları yaptıktan sonra “protected void onCreate(Bundle savedInstanceState) {” metodunun içinde resim nesnemizi tanımlayalım.//kamerada çekilen resmi gösterecek, resim nesnesini tanımladık
    resim=findViewById(R.id.resim);

Sonraki aşamada button için kullanacağımız resimcek metodunu yazıyoruz.

public void resimcek(View view){
    if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)== PackageManager.PERMISSION_GRANTED)
    {
        Intent kamerac=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(kamerac,resimkod);
    } else
    {
        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},resimkod);
    }

}

Burada öncelikle Manifet dosyamızda kamera iznini kontrol edip, eğer izin alınmışsa Kameraya ulaşıyoruz.

  • Kameradan çekilen resmi ImageView nesnemize eklemek için kullanacağımız metod aşağıdaki gibidir.//Kameradan çekilen resmi imageview e ekleyelim
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==resimkod)
    {
    Bitmap photo=(Bitmap) data.getExtras().get("data");
    resim.setImageBitmap(photo);
    }
    
    }
    

Son adımda Kamera erişimi sırasında izin isteme ve verilen izne göre kameraya ulaşıp resmi çekme metodonu yazacağız.

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == resimkod) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Intent kamerac=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(kamerac,resimkod);
        } else {
            Toast.makeText(this, "Kamera izni reddedildi!", Toast.LENGTH_SHORT).show();
        }
    }
}

MaintActivity.java dosyamızın son hali aşağıdaki gibidir.

package com.example.myapplication;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity {
private static final int resimkod=1;
private ImageView resim;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);

//kamerada çekilen resmi gösterecek, resim nesnesini tanımladık
resim=findViewById(R.id.resim);

ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
}

public void resimcek(View view){
if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)== PackageManager.PERMISSION_GRANTED)
{
Intent kamerac=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(kamerac,resimkod);
} else
{
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},resimkod);
}

}

//Kameradan çekilen resmi imageview e ekleyelim
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==resimkod)
{
Bitmap photo=(Bitmap) data.getExtras().get("data");
resim.setImageBitmap(photo);
}

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == resimkod) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Intent kamerac=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(kamerac,resimkod);
} else {
Toast.makeText(this, "Kamera izni reddedildi!", Toast.LENGTH_SHORT).show();
}
}
}
}

Tasarımı yapıp ve kodları yazdıktan sonra uygulamamızı çalıştırdığımızda aşağıdaki gibi izin ekranını göreceğiz.
android-izinler-cikti-png Android Studio İzinler ve Örnek Kamera Uygulaması

Uygulamanın Kaynak Kodlarını İndirmek İçin Tıklayınız