it-swarm.com.de

Android 6.0-Berechtigung.GET_ACCOUNTS

Ich benutze das, um eine Erlaubnis zu bekommen:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(context, Manifest.permission.GET_ACCOUNTS)) {

    } else {
        // No explanation needed, we can request the permission.
        ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.GET_ACCOUNTS}, PERMISSIONS_REQUEST_GET_ACCOUNTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}

Der Popup-Dialog für die Erlaubnis fragt den Benutzer jedoch nach den Kontakten!?!?

In vor 6.0 im Play Store mit 

<uses-permission Android:name="Android.permission.GET_ACCOUNTS"/>

request heißt Identität und erklärt, ich brauche es, um ein Gerätekonto zu erhalten. 

34
SpyZip

Das liegt an Berechtigungsgruppen. Grundsätzlich werden Berechtigungen verschiedenen Gruppen zugeordnet, und alle Berechtigungen dieser Gruppe werden erteilt, wenn eine davon erteilt wird. 

Z.B. Unter "Kontakte" gibt es Schreib-/Lese-Kontakte und Abrufen von Konten. Wenn Sie danach fragen, fordert das Popup-Fenster nach den Berechtigungen für Kontakte.

Lesen Sie durch: Alles, was jeder Android-Entwickler über die Laufzeitgenehmigung des neuen Android wissen muss


EDIT 1

Ich dachte nur, ich füge die verwandten hinzu (nicht um Konten, sondern Berechtigungen und Gruppen zu erhalten). Oreo Update Info:
source: https://developer.Android.com/about/versions/oreo/Android-8.0-changes.html#rmp

Vor Android 8.0 (API Level 26), wenn eine App eine Berechtigung angefordert hat zur Laufzeit und der Berechtigung wurde das System auch falsch erteilt der App die restlichen Berechtigungen, die zu derselben .__ gehörten. Berechtigungsgruppe, und diese wurden im Manifest registriert.

Für Apps mit Android 8.0 wurde dieses Verhalten korrigiert. Das App erhält nur die Berechtigungen, die sie explizit angefordert hat. Sobald der Benutzer der App jedoch eine Berechtigung erteilt, werden alle nachfolgenden Anforderungen für Berechtigungen in dieser Berechtigungsgruppe lauten automatisch gewährt.


31
Pararth

GET_ACCOUNTS wurde in Android 6.0 in die Berechtigungsgruppe CONTACTS verschoben . Während die API über Berechtigungen verfügt, wird der Benutzer (mindestens für Android 6.0) zur Angabe von Berechtigungsgruppen aufgefordert. Dem Benutzer wird daher dieselbe Aufforderung für GET_ACCOUNTS gegeben, die er für READ_CONTACTS oder WRITE_CONTACTS erhalten würde.

18
CommonsWare

Zum Glück wird sich dies in Android N ändern 

http://developer.Android.com/preview/behavior-changes.html#perm

Die Berechtigung GET_ACCOUNTS ist jetzt veraltet. Das System ignoriert dies Erlaubnis für Apps, die auf Android N abzielen.

6
ibmkhd

In Marshmallow gehören alle gefährlichen Berechtigungen zu Berechtigungsgruppen. 

Die Erlaubnis Android.permission.GET_ACCOUNTS gehört zu CONTACT group 

Weitere Informationen zu gefährlichen Berechtigungen und deren Gruppen finden Sie hier:
https://developer.Android.com/guide/topics/security/permissions.html#normal-dangerous

2

Ich habe deine Frage zuerst falsch verstanden. Auf dieser Seite http://developer.Android.com/guide/topics/security/permissions.html#perm-groups können Sie sehen, dass GET_ACCOUNTS auf die Kontakte der Berechtigungsgruppe verweist. Aus diesem Grund werden Sie zur Kontakterlaubnis aufgefordert.

1
Thomas R.

Wenn Sie die Berechtigung GET_ACCOUNTS verwenden, um den Benutzer aufzufordern, einen bestimmten Kontotyp auf dem Gerät (in meinem Fall Google) auszuwählen, können Sie die AccountPicker-Klasse verwenden, für die keine besonderen Berechtigungen erforderlich sind

Intent intent = AccountPicker.newChooseAccountIntent(null, null,
                    new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE},
                    false, null, null, null, null);
try {
    startActivityForResult(intent, REQUEST_ACCOUNT_PICKER);
} catch (ActivityNotFoundException e) {
    // This device may not have Google Play Services installed.
}

Sie benötigen eine Authentifizierung für die Google Play-Dienste in Ihren Abstufungsabhängigkeiten

implementation com.google.Android.gms:play-services-auth:16.0.1

Dadurch wird das Popup-Fenster Kontakte für mich vermieden

0
Jer