EasyPermissions adalah pustaka wrapper untuk menyederhanakan logika izin sistem dasar saat menargetkan Android M atau lebih tinggi.
Catatan: Jika aplikasi Anda ditulis di Kotlin, pertimbangkan pustaka easypermissions-ktx yang menambahkan ekstensi Kotlin ke pustaka inti EasyPermissions.
EasyPermissions diinstal dengan menambahkan ketergantungan berikut ke file build.gradle
Anda:
dependencies {
// For developers using AndroidX in their applications
implementation ' pub.devrel:easypermissions:3.0.0 '
// For developers using the Android Support Library
implementation ' pub.devrel:easypermissions:2.0.1 '
}
Untuk mulai menggunakan EasyPermissions, minta Activity
(atau Fragment
) Anda mengganti metode onRequestPermissionsResult
:
public class MainActivity extends AppCompatActivity {
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
}
@ Override
public void onRequestPermissionsResult ( int requestCode , String [] permissions , int [] grantResults ) {
super . onRequestPermissionsResult ( requestCode , permissions , grantResults );
// Forward results to EasyPermissions
EasyPermissions . onRequestPermissionsResult ( requestCode , permissions , grantResults , this );
}
}
Contoh di bawah ini menunjukkan cara meminta izin untuk metode yang memerlukan izin CAMERA
dan ACCESS_FINE_LOCATION
. Ada beberapa hal yang perlu diperhatikan:
EasyPermissions#hasPermissions(...)
untuk memeriksa apakah aplikasi sudah memiliki izin yang diperlukan. Metode ini dapat menggunakan sejumlah izin sebagai argumen terakhirnya.EasyPermissions#requestPermissions
. Metode ini akan meminta izin sistem dan menampilkan string alasan yang diberikan jika perlu. Kode permintaan yang diberikan harus unik untuk permintaan ini, dan metode ini dapat menggunakan sejumlah izin sebagai argumen terakhirnya.AfterPermissionGranted
. Ini opsional, tetapi disediakan demi kenyamanan. Jika semua izin dalam permintaan tertentu diberikan, semua metode yang diberi keterangan dengan kode permintaan yang tepat akan dieksekusi (pastikan memiliki kode permintaan unik). Metode yang dianotasi harus kosong dan tanpa parameter masukan (sebagai gantinya, Anda dapat menggunakan onSaveInstanceState untuk mempertahankan status parameter yang disembunyikan). Hal ini untuk menyederhanakan alur umum yang mengharuskan menjalankan metode permintaan setelah semua izinnya diberikan. Hal ini juga dapat dicapai dengan menambahkan logika pada callback onPermissionsGranted
. @ AfterPermissionGranted ( RC_CAMERA_AND_LOCATION )
private void methodRequiresTwoPermission () {
String [] perms = { Manifest . permission . CAMERA , Manifest . permission . ACCESS_FINE_LOCATION };
if ( EasyPermissions . hasPermissions ( this , perms )) {
// Already have permission, do the thing
// ...
} else {
// Do not have permissions, request them now
EasyPermissions . requestPermissions ( this , getString ( R . string . camera_and_location_rationale ),
RC_CAMERA_AND_LOCATION , perms );
}
}
Atau untuk kontrol yang lebih baik atas dialog alasan, gunakan PermissionRequest
:
EasyPermissions . requestPermissions (
new PermissionRequest . Builder ( this , RC_CAMERA_AND_LOCATION , perms )
. setRationale ( R . string . camera_and_location_rationale )
. setPositiveButtonText ( R . string . rationale_ask_ok )
. setNegativeButtonText ( R . string . rationale_ask_cancel )
. setTheme ( R . style . my_fancy_style )
. build ());
Secara opsional, untuk kontrol yang lebih baik, Anda dapat meminta Activity
/ Fragment
Anda mengimplementasikan antarmuka PermissionCallbacks
.
public class MainActivity extends AppCompatActivity implements EasyPermissions . PermissionCallbacks {
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
}
@ Override
public void onRequestPermissionsResult ( int requestCode , String [] permissions , int [] grantResults ) {
super . onRequestPermissionsResult ( requestCode , permissions , grantResults );
// Forward results to EasyPermissions
EasyPermissions . onRequestPermissionsResult ( requestCode , permissions , grantResults , this );
}
@ Override
public void onPermissionsGranted ( int requestCode , List < String > list ) {
// Some permissions have been granted
// ...
}
@ Override
public void onPermissionsDenied ( int requestCode , List < String > list ) {
// Some permissions have been denied
// ...
}
}
Dalam beberapa kasus, aplikasi Anda tidak akan berfungsi dengan baik tanpa izin tertentu. Jika pengguna menolak izin ini dengan opsi "Jangan Tanya Lagi", Anda tidak akan dapat meminta izin ini dari pengguna dan izin tersebut harus diubah di pengaturan aplikasi. Anda dapat menggunakan metode EasyPermissions.somePermissionPermanentlyDenied(...)
untuk menampilkan dialog kepada pengguna dalam situasi ini dan mengarahkan mereka ke layar pengaturan sistem untuk aplikasi Anda:
Catatan : Karena keterbatasan informasi yang disediakan oleh API izin kerangka kerja Android, metode somePermissionPermanentlyDenied
hanya berfungsi setelah izin ditolak dan aplikasi Anda menerima callback onPermissionsDenied
. Jika tidak, perpustakaan tidak dapat membedakan penolakan permanen dari kasus "belum ditolak".
@ Override
public void onPermissionsDenied ( int requestCode , List < String > perms ) {
Log . d ( TAG , "onPermissionsDenied:" + requestCode + ":" + perms . size ());
// (Optional) Check whether the user denied any permissions and checked "NEVER ASK AGAIN."
// This will display a dialog directing them to enable the permission in app settings.
if ( EasyPermissions . somePermissionPermanentlyDenied ( this , perms )) {
new AppSettingsDialog . Builder ( this ). build (). show ();
}
}
@ Override
public void onActivityResult ( int requestCode , int resultCode , Intent data ) {
super . onActivityResult ( requestCode , resultCode , data );
if ( requestCode == AppSettingsDialog . DEFAULT_SETTINGS_REQ_CODE ) {
// Do something after user returned from app settings screen, like showing a Toast.
Toast . makeText ( this , R . string . returned_from_app_settings_to_activity , Toast . LENGTH_SHORT )
. show ();
}
}
Terapkan EasyPermissions.RationaleCallbacks
jika Anda ingin berinteraksi dengan dialog alasan.
@ Override
public void onRationaleAccepted ( int requestCode ) {
// Rationale accepted to request some permissions
// ...
}
@ Override
public void onRationaleDenied ( int requestCode ) {
// Rationale denied to request some permissions
// ...
}
Alasan callback tidak selalu berarti perubahan izin. Untuk memeriksanya, lihat EasyPermissions.PermissionCallbacks
.
Copyright 2017 Google
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.