Skip to content →

Handle Permission Pada Android Marshmallow

Artikel terkait: Perubahan Kebijakan Permission pada Android Marshmallow

Yep, masih di Permission pada Marshmallow kali ini lebih teknikal. Bagaimana handle permission tersebut. Kita paham betul untuk setting permission pada Android dibawah Marshmallow hanya cukup menambahkan permission di AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.swarawan.permission">
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <application
        ...
    </application>
</manifest>

Nah untuk versi Marshmallow, karena granting permission dilakukan didalam aplikasi, maka kita perlu menambahkan beberapa magic words didalam file java.

Langkah-langkahnya!!

Okeoke, berikut step by step nya:

  1. Deklarasikan di AndroidManifest.xml seperti yang kita lakukan pada versi sebelum Marshmallow.
  2. Pada fitur-fitur yang menggunakan permission tertentu, berikan logika-logika yang berfungsi untuk menanyakan ke user mengenai permission yang akan digunakan. Slow.. Jangan bingung dulu. Di dokumentasi nya sudah disediakan, tinggal kita implementasikan saja. Saya ambil contoh untuk meng-akses lokasi, menggunakan ACCESS_COARSE_LOCATION dan ACCESS_FINE_LOCATION. Berikut…
    private void checkPermission() {
    int coarseLocationPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
    int fineLocationPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
    //cek apakah aplikasi sudah mendapatkan permission atau belum
    if (coarseLocationPermission != PackageManager.PERMISSION_GRANTED || fineLocationPermission != PackageManager.PERMISSION_GRANTED) {
        //cek apakah perlu menampilkan informasi permission
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_LOCATION);
        } else {
            // lakukan request untuk permission
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_LOCATION);
        }
    } else {
        // permission berhasil didapatkan
        Toast.makeText(this, "Permission granted!", Toast.LENGTH_SHORT).show();
        changeStatus(true);
    }
    }
  3. Kemudian, tambahkan fungsi untuk handle untuk aksi terhadap request permission tersebut.
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_LOCATION) {
        Toast.makeText(this, "Permission granted!", Toast.LENGTH_SHORT).show();
        doSomethingAwesome();
    } else {
        Toast.makeText(this, "Permission not granted!", Toast.LENGTH_SHORT).show();
    }}

Sip…. Kira-kira begitu, 3x langkah kelar. Intinya ada pada

ContextCompat.checkPermission(context, permission)

Yang berfungsi sebagai pengecekan apakah aplikasi sudah memiliki permission tersebut atau belum. Apabila belum maka akan ditanya apakah boleh menggunakan permission tersebut? Hal ini di-handle pada fungsi

ActivityCompat.requestPermissions(...)

dimana hasil dari apapun yang kita pilih (Allow atau Deny) akan dihandle oleh fungsi

onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)

 

Untuk sample code, bisa disedot disini.

Semoga bermanfaat

Published in Android

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *