Ich versuche, den Benutzer zu erhalten, die Ortsgruppe Erlaubnis für meine app mit Cordova hasPermission/requestPermission Methoden zu ermöglichen, aber die Ergebnisse sind verwirrend ...Cordova Laufzeitberechtigungen
Wenn ich rufe hasPermission mit ACCESS_FINE_LOCATION es, gibt immer wahr zurück. Bei Aufruf von Manifest.permission_group.LOCATION wird wahr/falsch zurückgegeben.
Der Aufruf von requestPermission mit Manifest.permission_group.LOCATION zeigt keinen Systemdialog an, daher rufe ich diesen mit ACCESS_FINE_LOCATION an, um den Dialog zu erhalten.
Das Dialogfeld Erlauben aktiviert die Standortgruppenberechtigung für meine App und ruft onRequestPermissionResult mit PackageManager.PERMISSION_GRANTED auf, aber die Schaltfläche Verweigern gibt auch ... GRANTED zurück, wobei die Berechtigung für die Standortgruppe deaktiviert bleibt.
Zur Veranschaulichung hier ist mein aktueller Code:
private void checkPermissions() {
if (!cordova.hasPermission(Manifest.permission_group.LOCATION)) {
cordova.requestPermission(this, PERMISSION_RUNTIME_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION);
}
}
@Override
public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) throws JSONException {
if (permissions.length != 1 || grantResults.length != 1 || !Manifest.permission.ACCESS_FINE_LOCATION.equals(permissions[0])) {
throw new RuntimeException("Unexpected permission results " + Arrays.toString(permissions) + ", " + Arrays.toString(grantResults));
}
int result = grantResults[0];
String action = null;
switch (result) {
case PackageManager.PERMISSION_DENIED:
action = Constants.ACTION_RUNTIME_PERMISSION_DENIED;
break;
case PackageManager.PERMISSION_GRANTED:
action = Constants.ACTION_RUNTIME_PERMISSION_GRANTED;
break;
default:
throw new RuntimeException("Unexpected permission result int " + result);
}
Intent i = new Intent(action);
i.putExtra("permission", Constants.EXTRA_RUNTIME_PERMISSION_NOTIFICATION_ID);
getContext().sendBroadcast(i);
}
Was ist der richtige Weg, dies zu umgehen? Manchmal scheint die Verwendung einer individuellen Berechtigung und manchmal die Verwendung einer Gruppe mit diesen Methoden nicht richtig - ich würde erwarten, dass dies konsistent ist. Meine Vermutung ist, dass die PERMISSION_GRANTED nach dem DENY-Taste im Dialogfeld gedrückt wird, weil ich eine individuelle Erlaubnis anfordern, die eingeschaltet ist, obwohl die Gruppe ausgeschaltet ist; Gibt es eine Möglichkeit zu erkennen, dass der Benutzer die Anfrage abgelehnt hat?
Ich habe eine Menge Fragen, die im Grunde auf "Wie bekomme ich entweder den Benutzer, um die Standortgruppe Erlaubnis zu aktivieren, wenn es aus ist oder wissen, wann sie ablehnen"?
Wenn es hilft, ist meine android-targetSdkVersion auf 22 eingestellt, und ich verwende Cordova 6.1.1.
Ich vermute, die GRANTED Rückgabe von der Schaltfläche Verweigern ist, weil es den API 22-Wert von True für ACCESS_FINE_LOCATION zurückgibt. – Crag