2016-10-02 3 views
0

Wenn die App gestartet wird, wird dieser Code ausgeführt und um eine Berechtigung gebeten.Berechtigungsanfragefenster wird nicht geschlossen, wenn Sie nach dem Verweigern der Berechtigung in Android akzeptieren?

public void requestPermission() 
{ 
    ActivityCompat.requestPermissions(this, 
      new String[] { android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION }, 
      Integer.parseInt(this.getString(R.string.LOCATION_REQUESTCODE))); 
} 

Der Benutzer kann dann die Erlaubnis akzeptieren oder verweigern. Es führt dann den folgenden Code aus.

@Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) 
    { 
     if(requestCode == Integer.parseInt(this.getString(R.string.LOCATION_REQUESTCODE))) 
     { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
      { 
       // permission was granted 
       // Continue running the application 
      } 
      else 
      { 
       // permission denied 
       Toast.makeText(this, R.string.gps_required, Toast.LENGTH_LONG).show(); 

       // Ask again to accept the permissions 
       requestPermission(); 
      } 
     } 
    } 

Also, wenn der Antrag abgelehnt wird, zeigt ein Toast der Benutzer es zu akzeptieren, um brauchen die Anwendung auszuführen (da die GPS-Koordinaten erforderlich sind) und die App fordert erneut die Berechtigungen vom Benutzer.

Aber das Problem ist: wenn Sie ablehnen, kommt das Popup wieder. Wenn ich 5 Mal ablehne, dann möchte ich akzeptieren, ich muss 5 Mal klicken, bevor alle Popups verschwinden.

Irgendeine Idee, was das verursacht? Warum gibt es noch Erlaubnis-Popups nach dem Akzeptieren?

Antwort

0

Die Antwort gefunden!

ActivityCompat.requestPermissions(this, 
     new String[] { android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION }, 
     Integer.parseInt(this.getString(R.string.LOCATION_REQUESTCODE))); 

Ich anfordernden 2 Berechtigungen: android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION ist also, warum das Popup zweimal kommt.

Die Lösung war, die android.Manifest.permission.ACCESS_COARSE_LOCATION zu entfernen, weil die Manifest.permission.ACCESS_FINE_LOCATION das bereits enthält.

Verwandte Themen