অ্যান্ড্রয়েড রানটাইম পারমিশন

অ্যান্ড্রয়েড SDK ভার্সন ২৩ মানে মার্শম্যালো থেকে রানটাইম পারমিশন চেক করতে হয়। কিভাবে সহজেই পারমিশনটা চেক করা যায়, তা দেখব আমরা। ধরে নিচ্ছি আমরা আমাদের অ্যাপে কন্টাক্ট লিস্ট পারমিশনটা ব্যবহার করব। তার জন্য প্রথমে পারমিশনটা AndroidManifest এ যুক্ত করে নিবঃ

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

আমরা একটা বাটন রাখব, যেখানে ক্লিক করলে পারমিশনটা চেক করবে। তার জন্য লেআউট ফাইলে একটা বাটন যুক্ত করে নিবঃ

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="me.jakir.permission.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:id="@+id/textView" />

    <Button
        android:text="Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="41dp"
        android:layout_marginStart="41dp"
        android:layout_marginTop="66dp"
        android:id="@+id/button" />
</RelativeLayout>

পারমিশন চেক করার জন্য আমরা এভাবে চেক করতে পারিঃ checkSelfPermission(Manifest.permission.READ_CONTACTS। এরপর দেখতে পারি পারমিশন দেওয়া আছে কিনা, যদি দেওয়া না থাকে আমরা ব্যবহার কারী থেকে পারমিশন রিকোয়েস্ট করব। মার্শম্যালো এর আগের ভার্সনে পারমিশনটা চেক করতে হবে না। তাই আমরা এভাবে কোড লিখতে পারিঃ


     if (Build.VERSION.SDK_INT >= 23) {
                    if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
                            != PackageManager.PERMISSION_GRANTED) {
                        requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
                                PERMISSIONS_REQUEST_READ_CONTACTS);
                        return;
                    }
                } else {
                    // Pre-Marshmallow
                }

পারমিশন দেওয়ার পর কি কাজ করব বা কোন ফাংশন কল করব, তা আমরা করব onRequestPermissionsResult মেথডের মধ্যেঃ

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show();

        } else {

            Toast.makeText(MainActivity.this, "Permission denied", Toast.LENGTH_LONG).show();

            // permission denied, boo! Disable the
            // functionality that depends on this permission.
        }
        return;
    }

সম্পূর্ণ MainActivity.java

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 0;
    Button button;

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

        button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (Build.VERSION.SDK_INT >= 23) {
                    if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
                            != PackageManager.PERMISSION_GRANTED) {
                        requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
                                PERMISSIONS_REQUEST_READ_CONTACTS);
                        return;
                    }
                } else {
                    // Pre-Marshmallow
                }

            }
        });


    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show();

        } else {

            Toast.makeText(MainActivity.this, "Permission denied", Toast.LENGTH_LONG).show();

            // permission denied, boo! Disable the
            // functionality that depends on this permission.
        }
        return;
    }


}

একের অধিক এক সাথে পারমিশন আমরা এভাবে চেক করতে পারিঃ

 List<String> listPermissionsNeeded = new ArrayList<>();

                    if (checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
                        listPermissionsNeeded.add(Manifest.permission.READ_CONTACTS);
                    }
                    if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                        listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
                    }

                    if (!listPermissionsNeeded.isEmpty()) {
                        ActivityCompat.requestPermissions(MainActivity.this,
                                listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), PERMISSIONS_REQUEST_READ_CONTACTS);

                    }

AndroidMenifest.xml এ তখন পারমিশন গুলো যুক্ত করতে হবেঃ

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

সম্পুর্ণ ActivityMain.java:

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 0;
    private static final int PERMISSIONS_REQUEST_WRITE_STORAGE = 1;
    Button button;

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

        button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (Build.VERSION.SDK_INT >= 23) {


                    List<String> listPermissionsNeeded = new ArrayList<>();

                    if (checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
                        listPermissionsNeeded.add(Manifest.permission.READ_CONTACTS);
                    }
                    if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                        listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
                    }

                    if (!listPermissionsNeeded.isEmpty()) {
                        ActivityCompat.requestPermissions(MainActivity.this,
                                listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), PERMISSIONS_REQUEST_READ_CONTACTS);

                    }

                } else {
                    // Pre-Marshmallow
                }

            }
        });


    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

            switch (requestCode) {
                case PERMISSIONS_REQUEST_READ_CONTACTS: {

                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                        Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show();

                    } else {

                        Toast.makeText(MainActivity.this, "Permission denied", Toast.LENGTH_LONG).show();

                        // permission denied, boo! Disable the
                        // functionality that depends on this permission.
                    }
                    return;
                }

                case PERMISSIONS_REQUEST_WRITE_STORAGE: {
                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                        Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show();

                    } else {

                        Toast.makeText(MainActivity.this, "Permission denied", Toast.LENGTH_LONG).show();

                        // permission denied, boo! Disable the
                        // functionality that depends on this permission.
                    }
                    return;


                    }
                }

            }


}

Leave a Reply