PermissionsDispatcher bietet eine einfache annotationsbasierte API zur Verarbeitung von Laufzeitberechtigungen.
Diese Bibliothek verringert den Aufwand, der mit dem Schreiben einer Reihe von Prüfanweisungen einhergeht, ob eine Berechtigung von Ihnen erteilt wurde oder nicht, um Ihren Code sauber und sicher zu halten.
Hier ist ein Minimalbeispiel, in dem Sie eine MainActivity
registrieren, die Manifest.permission.CAMERA
erfordert.
Fügen Sie die folgende Zeile zu AndroidManifest.xml
hinzu:
<uses-permission android:name="android.permission.CAMERA" />
PermissionsDispatcher führt nur wenige Anmerkungen ein und hält seine allgemeine API prägnant:
HINWEIS: Annotierte Methoden dürfen nicht
private
sein.
Anmerkung | Erforderlich | Beschreibung |
---|---|---|
@RuntimePermissions | ✓ | Registrieren Sie eine Activity oder Fragment um Berechtigungen zu verwalten |
@NeedsPermission | ✓ | Kommentieren Sie eine Methode, die die Aktion ausführt, für die eine oder mehrere Berechtigungen erforderlich sind |
@OnShowRationale | Kommentieren Sie eine Methode, die erklärt, warum die Berechtigungen erforderlich sind. Es übergibt ein PermissionRequest Objekt, das verwendet werden kann, um die aktuelle Berechtigungsanforderung auf Benutzereingabe fortzusetzen oder abzubrechen. Wenn Sie kein Argument für die Methode angeben, generiert der Compiler process${NeedsPermissionMethodName}ProcessRequest und cancel${NeedsPermissionMethodName}ProcessRequest . Sie können diese Methoden anstelle von PermissionRequest verwenden (z. B. mit DialogFragment ). | |
@OnPermissionDenied | Kommentieren Sie eine Methode, die aufgerufen wird, wenn der Benutzer die Berechtigungen nicht erteilt | |
@OnNeverAskAgain | Kommentieren Sie eine Methode, die aufgerufen wird, wenn der Benutzer sich dafür entschieden hat, dass das Gerät „nie wieder nach einer Berechtigung fragt“. |
@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()
}
}
Jetzt sind die generierten Funktionen viel prägnanter und intuitiver als in der Java-Version!
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)
}
Weitere Einzelheiten finden Sie im Beispiel.
NOTIZ:
Um PermissionsDispatcher zu Ihrem Projekt hinzuzufügen, fügen Sie Folgendes in die build.gradle
Datei Ihres App-Moduls ein:
${latest.version}
ist
dependencies {
implementation " com.github.permissions-dispatcher:permissionsdispatcher: ${ latest.version } "
annotationProcessor " com.github.permissions-dispatcher:permissionsdispatcher-processor: ${ latest.version } "
}
Mit 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.