PermissionsDispatcher fornece uma API simples baseada em anotações para lidar com permissões de tempo de execução.
Esta biblioteca alivia o fardo de escrever um monte de instruções de verificação, independentemente de sua permissão ter sido concedida ou não, a fim de manter seu código limpo e seguro.
Aqui está um exemplo mínimo, no qual você registra uma MainActivity
que requer Manifest.permission.CAMERA
.
Adicione a seguinte linha ao AndroidManifest.xml
:
<uses-permission android:name="android.permission.CAMERA" />
PermissionsDispatcher introduz apenas algumas anotações, mantendo sua API geral concisa:
NOTA: Os métodos anotados não devem ser
private
.
Anotação | Obrigatório | Descrição |
---|---|---|
@RuntimePermissions | ✓ | Registre uma Activity ou Fragment para lidar com permissões |
@NeedsPermission | ✓ | Anote um método que executa a ação que requer uma ou mais permissões |
@OnShowRationale | Anote um método que explique por que as permissões são necessárias. Ele passa um objeto PermissionRequest que pode ser usado para continuar ou cancelar a solicitação de permissão atual mediante entrada do usuário. Se você não especificar nenhum argumento para o método, o compilador irá gerar process${NeedsPermissionMethodName}ProcessRequest e cancel${NeedsPermissionMethodName}ProcessRequest . Você pode usar esses métodos no lugar de PermissionRequest (ex: com DialogFragment ) | |
@OnPermissionDenied | Anote um método que será invocado se o usuário não conceder as permissões | |
@OnNeverAskAgain | Anote um método que será invocado se o usuário optar por fazer com que o dispositivo "nunca pergunte novamente" sobre uma permissão |
@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()
}
}
Agora as funções geradas tornam-se muito mais concisas e intuitivas do que a versão 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)
}
Confira a amostra para mais detalhes.
OBSERVAÇÃO:
Para adicionar PermissionsDispatcher ao seu projeto, inclua o seguinte no arquivo build.gradle
do módulo do aplicativo :
${latest.version}
é
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
annotationProcessor " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
Com 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.