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.
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.
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.
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.
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
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.
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