يوفر PermissionsDispatcher واجهة برمجة تطبيقات بسيطة تعتمد على التعليقات التوضيحية للتعامل مع أذونات وقت التشغيل.
تخفف هذه المكتبة العبء الذي يأتي مع كتابة مجموعة من بيانات الشيكات سواء تم منحك إذنًا أم لا، وذلك للحفاظ على الكود الخاص بك نظيفًا وآمنًا.
فيما يلي مثال على الأقل، حيث تقوم بتسجيل MainActivity
الذي يتطلب Manifest.permission.CAMERA
.
أضف السطر التالي إلى AndroidManifest.xml
:
<uses-permission android:name="android.permission.CAMERA" />
يقدم PermissionsDispatcher عددًا قليلاً من التعليقات التوضيحية فقط، مع الحفاظ على واجهة برمجة التطبيقات العامة الخاصة به موجزة:
ملاحظة: يجب ألا تكون الأساليب المشروحة
private
.
تعليق توضيحي | مطلوب | وصف |
---|---|---|
@RuntimePermissions | ✓ | قم بتسجيل Activity أو Fragment للتعامل مع الأذونات |
@NeedsPermission | ✓ | قم بإضافة تعليق توضيحي إلى الطريقة التي تنفذ الإجراء الذي يتطلب إذنًا واحدًا أو أكثر |
@OnShowRationale | أضف تعليقًا توضيحيًا إلى الطريقة التي تشرح سبب الحاجة إلى الأذونات. يتم تمريره في كائن PermissionRequest والذي يمكن استخدامه لمواصلة أو إلغاء طلب الإذن الحالي عند إدخال المستخدم. إذا لم تحدد أي وسيطة للطريقة، فسيقوم المترجم بإنشاء process${NeedsPermissionMethodName}ProcessRequest cancel${NeedsPermissionMethodName}ProcessRequest . يمكنك استخدام هذه الأساليب بدلاً من PermissionRequest (على سبيل المثال: مع DialogFragment ) | |
@OnPermissionDenied | أضف تعليقًا توضيحيًا إلى الطريقة التي يتم استدعاؤها إذا لم يمنح المستخدم الأذونات | |
@OnNeverAskAgain | قم بإضافة تعليق توضيحي إلى الطريقة التي يتم استدعاؤها إذا اختار المستخدم أن يجعل الجهاز "لا يسأل مرة أخرى أبدًا" عن الإذن |
@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()
}
}
أصبحت الوظائف التي تم إنشاؤها الآن أكثر إيجازًا وبديهية من إصدار 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)
}
تحقق من العينة لمزيد من التفاصيل.
ملحوظة:
لإضافة PermissionsDispatcher إلى مشروعك، قم بتضمين ما يلي في ملف build.gradle
الخاص بوحدة التطبيق :
${latest.version}
هو
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
annotationProcessor " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
مع كوتلين:
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.