PermissionsDispatcher proporciona una API simple basada en anotaciones para manejar los permisos de tiempo de ejecución.
Esta biblioteca elimina la carga que conlleva escribir un montón de declaraciones de verificación, ya sea que usted haya otorgado o no un permiso, para mantener su código limpio y seguro.
Aquí hay un ejemplo mínimo, en el que registra una MainActivity
que requiere Manifest.permission.CAMERA
.
Agregue la siguiente línea a AndroidManifest.xml
:
<uses-permission android:name="android.permission.CAMERA" />
PermissionsDispatcher introduce solo algunas anotaciones, manteniendo su API general concisa:
NOTA: Los métodos anotados no deben ser
private
.
Anotación | Requerido | Descripción |
---|---|---|
@RuntimePermissions | ✓ | Registre una Activity o Fragment para manejar permisos |
@NeedsPermission | ✓ | Anotar un método que realiza la acción que requiere uno o más permisos |
@OnShowRationale | Anote un método que explique por qué se necesitan los permisos. Pasa un objeto PermissionRequest que se puede utilizar para continuar o cancelar la solicitud de permiso actual tras la entrada del usuario. Si no especifica ningún argumento para el método, el compilador generará process${NeedsPermissionMethodName}ProcessRequest y cancel${NeedsPermissionMethodName}ProcessRequest . Puede utilizar esos métodos en lugar de PermissionRequest (por ejemplo, con DialogFragment ) | |
@OnPermissionDenied | Anotar un método que se invoca si el usuario no otorga los permisos. | |
@OnNeverAskAgain | Anotar un método que se invoca si el usuario elige que el dispositivo "nunca vuelva a preguntar" sobre un permiso. |
@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()
}
}
¡Ahora las funciones generadas se vuelven mucho más concisas e intuitivas que la versión 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)
}
Consulte la muestra para obtener más detalles.
NOTA:
Para agregar PermissionsDispatcher a su proyecto, incluya lo siguiente en el archivo build.gradle
del módulo de su aplicación :
${latest.version}
es
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
annotationProcessor " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
Con 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.