1

Ich verwende die Google Standort-API, um den Standort des Nutzers auf der Karte anzuzeigen.Marshmallow - Google Maps Runtime-Berechtigungsproblem

Wenn die App zum ersten Mal geladen wird, wird der Begründungsdialog angezeigt, in dem erläutert wird, warum der Benutzer den Zugriff auf den Standort aktivieren muss. Dann wird runtime permission dialog angezeigt, und Benutzer klicken auf "Erlaube", um den Standortzugriff zu aktivieren. Die Map wird dann ohne Abstürze geladen.

Wenn die App jedoch fortgesetzt wird (nach dem Hineingehen in den Hintergrund), wird kein Begründungsdialog angezeigt, da der Benutzer den Standortzugriff bereits gewährt hat. In diesem Szenario wird nur die angezeigt. Wenn der Benutzer nun auf "Deny" klickt, stürzt die App ab. Dieser Code funktioniert in Android-Versionen unter M (Lutscher, Jellybean, KitKat usw.)

Gibt es eine Möglichkeit, die Laufzeitausnahme in diesem Stadium zu behandeln?

Der Fehler ist:

java.lang.SecurityException: Client ACCESS_FINE_LOCATION Erlaubnis Stellen zu beantragen PRIORITY_HIGH_ACCURACY haben muss.

Ich bin mit der Standardprobe MyLocation Demo-Anwendung ohne 3rd-Party-Bibliothek:

GoogleMaps MapDemo on Github

Ich habe auch versucht die PermissionsDispatcher Bibliothek verwenden, aber die gleichen Fehler bestehen bleiben.

PermissionDispatcher Android-Google-Maps-Demo

private void enableMyLocation() { 
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
      != PackageManager.PERMISSION_GRANTED) { 
     // Permission to access the location is missing. 
     PermissionUtils.requestPermission(this, LOCATION_PERMISSION_REQUEST_CODE, 
       Manifest.permission.ACCESS_FINE_LOCATION, true); 
    } else if (mMap != null) { 
     // Access to the location has been granted to the app. 
     mMap.setMyLocationEnabled(true); 
    } 
} 

Jede Hilfe ist sehr geschätzt.

+0

Beitrag der Code, wo Sie bitte um Berechtigungen bitten –

+0

Implementierung der Annahme/Verweigerung der Erlaubnis bedeutet nicht, dass Sie R-Code läuft gut. Es hängt nur davon ab, welchen Code Sie in diesen Fällen geschrieben haben. Bitte posten Sie die Callback-Methoden onCreate() und requests permissions? –

+0

Ich verwende das genaue Beispiel in [link] (https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/src/main/java/com/example/mapdemo/MyLocationDemoActivity. java) – Akshata

Antwort

0

Stellen sicher, dass Sie mit dem rechten Erlaubnis in Ihren Manifest-Dateien zu haben hinzuzufügen, was die Erlaubnis Sie fragt, und genau

Und kann sein Problem mit Ihrem Code erforderlich. Versuchen Sie diese Bibliothek: RuntimePermission Library Um Erlaubnis manuell zu fragen.

0

Beginnend in Android 6.0 (API Level 23), Benutzer grant permissions zu Anwendungen, während die App ausgeführt wird, nicht, wenn sie die App installieren. Dieser Ansatz optimiert den App-Installationsprozess, da der Benutzer keine Berechtigungen erteilen muss, wenn er die App installiert oder aktualisiert. Außerdem erhält der Benutzer mehr Kontrolle über die Funktionalität der App.

Wie, wenn Sie die Berechtigung überprüfen:

// Assume thisActivity is the current activity 
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, 
Manifest.permission.ACCESS_FINE_LOCATION); 
How to request the permissions you need : 

if (ContextCompat.checkSelfPermission(thisActivity, 
Manifest.permission.ACCESS_FINE_LOCATION) 
!= PackageManager.PERMISSION_GRANTED) { 

ActivityCompat.requestPermissions(thisActivity, 
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION); 

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

Wie für den Zugriff auf das Ergebnis der Anfrage:

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
switch (requestCode) { 
case MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: { 
// If request is cancelled, the result arrays are empty. 
if (grantResults.length > 0 
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

// permission was granted, yay! Do the task you need to do. 

} else { 

// permission denied, boo! Disable the functionality that depends on this permission. 
} 
return; 
} 
} 
} 

hier ein Zusammenhang mit SO-Ticket: Google Maps API Android v2 - "ACCESS_FINE_LOCATION" permission required with my-location layer enabled