EasyPermissions ist eine Wrapper-Bibliothek zur Vereinfachung der grundlegenden Systemberechtigungslogik für Android M oder höher.
Hinweis: Wenn Ihre App in Kotlin geschrieben ist, ziehen Sie die Bibliothek easypermissions-ktx in Betracht, die Kotlin-Erweiterungen zur Kernbibliothek EasyPermissions hinzufügt.
EasyPermissions wird installiert, indem Sie die folgende Abhängigkeit zu Ihrer build.gradle
Datei hinzufügen:
dependencies {
// For developers using AndroidX in their applications
implementation ' pub.devrel:easypermissions:3.0.0 '
// For developers using the Android Support Library
implementation ' pub.devrel:easypermissions:2.0.1 '
}
Um mit der Verwendung von EasyPermissions zu beginnen, lassen Sie Ihre Activity
(oder Fragment
) die Methode onRequestPermissionsResult
überschreiben:
public class MainActivity extends AppCompatActivity {
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
}
@ Override
public void onRequestPermissionsResult ( int requestCode , String [] permissions , int [] grantResults ) {
super . onRequestPermissionsResult ( requestCode , permissions , grantResults );
// Forward results to EasyPermissions
EasyPermissions . onRequestPermissionsResult ( requestCode , permissions , grantResults , this );
}
}
Das folgende Beispiel zeigt, wie Berechtigungen für eine Methode angefordert werden, die sowohl die Berechtigungen CAMERA
als auch ACCESS_FINE_LOCATION
erfordert. Es gibt ein paar Dinge zu beachten:
EasyPermissions#hasPermissions(...)
um zu überprüfen, ob die App bereits über die erforderlichen Berechtigungen verfügt. Diese Methode kann als letztes Argument eine beliebige Anzahl von Berechtigungen annehmen.EasyPermissions#requestPermissions
. Diese Methode fordert die Systemberechtigungen an und zeigt bei Bedarf die bereitgestellte Begründungszeichenfolge an. Der bereitgestellte Anforderungscode sollte für diese Anforderung eindeutig sein und die Methode kann eine beliebige Anzahl von Berechtigungen als letztes Argument annehmen.AfterPermissionGranted
-Annotation. Dies ist optional, wird aber der Einfachheit halber bereitgestellt. Wenn alle Berechtigungen in einer bestimmten Anfrage erteilt werden, werden alle mit dem richtigen Anfragecode versehenen Methoden ausgeführt (stellen Sie sicher, dass Sie über einen eindeutigen Anfragecode verfügen). Die mit Anmerkungen versehene Methode muss ungültig und ohne Eingabeparameter sein (stattdessen können Sie onSaveInstanceState verwenden, um den Status Ihrer unterdrückten Parameter beizubehalten). Dies dient dazu, den üblichen Ablauf zu vereinfachen, bei dem die anfordernde Methode ausgeführt werden muss, nachdem alle ihre Berechtigungen erteilt wurden. Dies kann auch durch Hinzufügen von Logik zum onPermissionsGranted
-Rückruf erreicht werden. @ AfterPermissionGranted ( RC_CAMERA_AND_LOCATION )
private void methodRequiresTwoPermission () {
String [] perms = { Manifest . permission . CAMERA , Manifest . permission . ACCESS_FINE_LOCATION };
if ( EasyPermissions . hasPermissions ( this , perms )) {
// Already have permission, do the thing
// ...
} else {
// Do not have permissions, request them now
EasyPermissions . requestPermissions ( this , getString ( R . string . camera_and_location_rationale ),
RC_CAMERA_AND_LOCATION , perms );
}
}
Oder verwenden Sie für eine genauere Kontrolle über den Begründungsdialog eine PermissionRequest
:
EasyPermissions . requestPermissions (
new PermissionRequest . Builder ( this , RC_CAMERA_AND_LOCATION , perms )
. setRationale ( R . string . camera_and_location_rationale )
. setPositiveButtonText ( R . string . rationale_ask_ok )
. setNegativeButtonText ( R . string . rationale_ask_cancel )
. setTheme ( R . style . my_fancy_style )
. build ());
Optional können Sie für eine genauere Kontrolle Ihre Activity
/ Fragment
die PermissionCallbacks
Schnittstelle implementieren lassen.
public class MainActivity extends AppCompatActivity implements EasyPermissions . PermissionCallbacks {
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
}
@ Override
public void onRequestPermissionsResult ( int requestCode , String [] permissions , int [] grantResults ) {
super . onRequestPermissionsResult ( requestCode , permissions , grantResults );
// Forward results to EasyPermissions
EasyPermissions . onRequestPermissionsResult ( requestCode , permissions , grantResults , this );
}
@ Override
public void onPermissionsGranted ( int requestCode , List < String > list ) {
// Some permissions have been granted
// ...
}
@ Override
public void onPermissionsDenied ( int requestCode , List < String > list ) {
// Some permissions have been denied
// ...
}
}
In einigen Fällen funktioniert Ihre App ohne bestimmte Berechtigungen nicht ordnungsgemäß. Wenn der Benutzer diese Berechtigungen mit der Option „Nie wieder fragen“ verweigert, können Sie diese Berechtigungen nicht vom Benutzer anfordern und sie müssen in den App-Einstellungen geändert werden. Sie können die Methode EasyPermissions.somePermissionPermanentlyDenied(...)
verwenden, um dem Benutzer in dieser Situation einen Dialog anzuzeigen und ihn zum Systemeinstellungsbildschirm für Ihre App zu leiten:
Hinweis : Aufgrund einer Einschränkung der von der Android-Framework-Berechtigungs-API bereitgestellten Informationen funktioniert die Methode somePermissionPermanentlyDenied
nur, nachdem die Berechtigung verweigert wurde und Ihre App den Rückruf onPermissionsDenied
erhalten hat. Andernfalls kann die Bibliothek die dauerhafte Ablehnung nicht vom Fall „noch nicht abgelehnt“ unterscheiden.
@ Override
public void onPermissionsDenied ( int requestCode , List < String > perms ) {
Log . d ( TAG , "onPermissionsDenied:" + requestCode + ":" + perms . size ());
// (Optional) Check whether the user denied any permissions and checked "NEVER ASK AGAIN."
// This will display a dialog directing them to enable the permission in app settings.
if ( EasyPermissions . somePermissionPermanentlyDenied ( this , perms )) {
new AppSettingsDialog . Builder ( this ). build (). show ();
}
}
@ Override
public void onActivityResult ( int requestCode , int resultCode , Intent data ) {
super . onActivityResult ( requestCode , resultCode , data );
if ( requestCode == AppSettingsDialog . DEFAULT_SETTINGS_REQ_CODE ) {
// Do something after user returned from app settings screen, like showing a Toast.
Toast . makeText ( this , R . string . returned_from_app_settings_to_activity , Toast . LENGTH_SHORT )
. show ();
}
}
Implementieren Sie EasyPermissions.RationaleCallbacks
, wenn Sie mit dem Begründungsdialog interagieren möchten.
@ Override
public void onRationaleAccepted ( int requestCode ) {
// Rationale accepted to request some permissions
// ...
}
@ Override
public void onRationaleDenied ( int requestCode ) {
// Rationale denied to request some permissions
// ...
}
Begründungsrückrufe bedeuten nicht unbedingt Berechtigungsänderungen. Um dies zu überprüfen, sehen Sie sich EasyPermissions.PermissionCallbacks
an.
Copyright 2017 Google
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.