PermissionsDispatcher fournit une API simple basée sur des annotations pour gérer les autorisations d'exécution.
Cette bibliothèque allège le fardeau lié à l'écriture d'un ensemble d'instructions de contrôle, que vous ayez accordé ou non une autorisation, afin de garder votre code propre et sûr.
Voici un exemple minimum, dans lequel vous enregistrez une MainActivity
qui nécessite Manifest.permission.CAMERA
.
Ajoutez la ligne suivante à AndroidManifest.xml
:
<uses-permission android:name="android.permission.CAMERA" />
PermissionsDispatcher n'introduit que quelques annotations, gardant son API générale concise :
REMARQUE : Les méthodes annotées ne doivent pas être
private
.
Annotation | Requis | Description |
---|---|---|
@RuntimePermissions | ✓ | Enregistrez une Activity ou Fragment pour gérer les autorisations |
@NeedsPermission | ✓ | Annoter une méthode qui effectue l'action qui nécessite une ou plusieurs autorisations |
@OnShowRationale | Annotez une méthode qui explique pourquoi les autorisations sont nécessaires. Il transmet un objet PermissionRequest qui peut être utilisé pour continuer ou abandonner la demande d'autorisation en cours lors de la saisie de l'utilisateur. Si vous ne spécifiez aucun argument pour la méthode, le compilateur générera process${NeedsPermissionMethodName}ProcessRequest et cancel${NeedsPermissionMethodName}ProcessRequest . Vous pouvez utiliser ces méthodes à la place de PermissionRequest (ex : avec DialogFragment ) | |
@OnPermissionDenied | Annoter une méthode qui est invoquée si l'utilisateur n'accorde pas les autorisations | |
@OnNeverAskAgain | Annoter une méthode qui est invoquée si l'utilisateur a choisi que l'appareil "ne demande plus jamais" une autorisation |
@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()
}
}
Les fonctions désormais générées deviennent beaucoup plus concises et intuitives que la version 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)
}
Consultez l’échantillon pour plus de détails.
NOTE:
Pour ajouter PermissionsDispatcher à votre projet, incluez les éléments suivants dans le fichier build.gradle
de votre module d'application :
${latest.version}
est
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
annotationProcessor " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
Avec 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.