2015-10-11 5 views
13
java.lang.SecurityException: Client must have ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to perform any location operations. 

Die App funktioniert für Android Version 5 (Lollipop) in Ordnung, aber bekommt eine Sicherheitsausnahme auf der Android-Version 6.Sicherheitsausnahme nur auf Android 6

Antwort

9

Auf Ihrer Aktivität:

private static final int REQUEST_FINE_LOCATION=0 
... 
loadPermissions(Manifest.permission.ACCESS_FINE_LOCATION,REQUEST_FINE_LOCATION); 

Umsetzung:

private void loadPermissions(String perm,int requestCode) { 
    if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED) { 
     if (!ActivityCompat.shouldShowRequestPermissionRationale(this, perm)) { 
      ActivityCompat.requestPermissions(this, new String[]{perm},requestCode); 
     } 
    } 
} 

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

    } 

} 
+1

In der 'loadPermissions()' -Funktion, sollte es nicht eine 'else'-Klausel geben (wenn 'checkSelfPermission()' '' PackageManager.PERMISSION_GRANTED' zurückgibt, wo Sie Ihre Erlaubnis-weise Zeug tun? 'OnRequestPermissionsResult()' wird aufgerufen nur nach dem Aufruf von 'requestPermissions()', also in dem Fall, dass ich beschrieben habe, wird nichts passieren. –

+0

Ist nur die Hauptidee ein Beispiel, vielleicht hast du in einigen Situationen "else" Implementierung geschrieben. – Hpsaturn

16

Dies liegt daran, dass diese Berechtigungen gefährliche Berechtigung als je neue Erlaubnis sind Modell von Android 6.0.

gefährliche Berechtigungen müssen zur Laufzeit angefordert werden und sollten vor jeder Verwendung überprüft werden.

müssen Sie Ihre Implementierung in adapt new permission model ändern.

+1

Normalerweise sollte dies nur erforderlich, wenn Sie 23+ Targeting sind API. Allerdings haben wir diese Art von Ausnahmen auch bei Android 6 festgestellt. Es gibt einen Fehler in der Fallback-Implementierung von Android. – ubuntudroid

Verwandte Themen