Ich versuche, ACCESS_FINE_LOCATION
Berechtigungen anfordern, um den aktuellen Standort des Benutzers zu erhalten.ActivityCompat.requestPermissions zeigt keine Eingabeaufforderung
Meine Protokollierung zeigt an, dass meine App diese Berechtigung derzeit nicht hat, wenn sie ContextCompat.checkSelfPermission()
abfragt, aber wenn ActivityCompat.requestPermissions()
aufgerufen wird, wird nichts angezeigt.
Mein Google-Kartencode (Implementierung OnMapReadyCallback
und ActivityCompat.OnRequestPermissionsResultCallback()
) ist in einem FragmentActivity
.
Ich habe es geschafft, die requestPermissions()
Funktion funktioniert erfolgreich in anderen Aktivitäten in der App, es ist nur die mit der Google-Karte. Es funktioniert nicht, wenn es in der onCreate()
Methode der Activity
oder in onMapReady()
platziert wird (wo es gehen muss).
if(ContextCompat.checkSelfPermission(LocationActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "not granted");
final String[] permissions = new String[] {android.Manifest.permission.ACCESS_FINE_LOCATION};
if(ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)) {
Log.d(TAG, "rationale");
// Explain to the user why permission is required, then request again
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("We need permissions")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
ActivityCompat.requestPermissions(LocationActivity.this, permissions, 1);
}
});
AlertDialog alert = builder.create();
alert.show();
} else {
Log.d(TAG, "request" + android.Manifest.permission.ACCESS_FINE_LOCATION);
// If permission has not been denied before, request the permission
ActivityCompat.requestPermissions(LocationActivity.this, permissions, 1);
}
} else {
Log.d(TAG, "granted");
}
Irgendwelche Ideen? Hat es etwas mit der Klasse meiner Aktivität zu tun (FragmentActivity
), oder ist es möglich, dass die Google Map die Berechtigungsanforderung asynchron aufruft?
Ich bin überrascht, dass dies kompiliert. 'checkSelfPermission()' verwendet 'LocationActivity.this'. Die zweite 'requestPermissions()' verwendet 'PermissionsRequestActivity.this'. – CommonsWare
Entschuldigung ja, ich musste meinen Code leicht ändern für die Veröffentlichung, der zweite sollte sein LocationActivity.this – Robin
Ich hatte versucht, alle requestPermissions in einer separaten Aktivität, aber das macht den Rückruf schwierig, und ist hacky. – Robin