PermissionsDispatcher menyediakan API berbasis anotasi sederhana untuk menangani izin runtime.
Pustaka ini menghilangkan beban yang timbul saat menulis sekumpulan pernyataan pemeriksaan apakah izin telah diberikan atau belum dari Anda, untuk menjaga kode Anda tetap bersih dan aman.
Berikut adalah contoh minimum, di mana Anda mendaftarkan MainActivity
yang memerlukan Manifest.permission.CAMERA
.
Tambahkan baris berikut ke AndroidManifest.xml
:
<uses-permission android:name="android.permission.CAMERA" />
PermissionsDispatcher hanya memperkenalkan beberapa anotasi, menjaga API umumnya tetap ringkas:
CATATAN: Metode yang diberi anotasi tidak boleh
private
.
Anotasi | Diperlukan | Keterangan |
---|---|---|
@RuntimePermissions | ✓ | Daftarkan Activity atau Fragment untuk menangani izin |
@NeedsPermission | ✓ | Beri anotasi pada metode yang melakukan tindakan yang memerlukan satu atau lebih izin |
@OnShowRationale | Beri anotasi pada metode yang menjelaskan mengapa izin diperlukan. Itu melewati objek PermissionRequest yang dapat digunakan untuk melanjutkan atau membatalkan permintaan izin saat ini berdasarkan input pengguna. Jika Anda tidak menentukan argumen apa pun untuk metode, kompiler akan menghasilkan process${NeedsPermissionMethodName}ProcessRequest dan cancel${NeedsPermissionMethodName}ProcessRequest . Anda dapat menggunakan metode tersebut sebagai pengganti PermissionRequest (misal: dengan DialogFragment ) | |
@OnPermissionDenied | Beri anotasi pada metode yang dipanggil jika pengguna tidak memberikan izin | |
@OnNeverAskAgain | Beri anotasi pada metode yang dipanggil jika pengguna memilih agar perangkat "tidak pernah bertanya lagi" tentang izin |
@RuntimePermissions
class MainActivity : AppCompatActivity (), View.OnClickListener {
@NeedsPermission( Manifest .permission. CAMERA )
fun showCamera () {
supportFragmentManager.beginTransaction()
.replace( R .id.sample_content_fragment, CameraPreviewFragment .newInstance())
.addToBackStack( " camera " )
.commitAllowingStateLoss()
}
@OnShowRationale( Manifest .permission. CAMERA )
fun showRationaleForCamera ( request : PermissionRequest ) {
showRationaleDialog( R .string.permission_camera_rationale, request)
}
@OnPermissionDenied( Manifest .permission. CAMERA )
fun onCameraDenied () {
Toast .makeText( this , R .string.permission_camera_denied, Toast . LENGTH_SHORT ).show()
}
@OnNeverAskAgain( Manifest .permission. CAMERA )
fun onCameraNeverAskAgain () {
Toast .makeText( this , R .string.permission_camera_never_askagain, Toast . LENGTH_SHORT ).show()
}
}
Sekarang fungsi yang dihasilkan menjadi jauh lebih ringkas dan intuitif dibandingkan versi Java!
override fun onCreate ( savedInstanceState : Bundle ? ) {
super .onCreate(savedInstanceState)
setContentView( R .layout.activity_main)
findViewById( R .id.button_camera).setOnClickListener {
// NOTE: delegate the permission handling to generated function
showCameraWithPermissionCheck()
}
}
override fun onRequestPermissionsResult ( requestCode : Int , permissions : Array < String >, grantResults : IntArray ) {
super .onRequestPermissionsResult(requestCode, permissions, grantResults)
// NOTE: delegate the permission handling to generated function
onRequestPermissionsResult(requestCode, grantResults)
}
Lihat sampel untuk lebih jelasnya.
CATATAN:
Untuk menambahkan PermissionsDispatcher ke proyek Anda, sertakan yang berikut ini dalam file build.gradle
modul aplikasi Anda:
${latest.version}
adalah
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
annotationProcessor " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
Dengan Kotlin:
apply plugin : ' kotlin-kapt '
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
kapt " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
Copyright 2016 Shintaro Katafuchi, Marcel Schnelle, Yoshinori Isogai
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.