2017-10-25 3 views
0

ich eine Klasse für Ihr Interesse an Berechtigungen gemacht PermissionsService genannt:ActivityCompat.requestPermissions tut nichts an allen

public void getPermission(final String androidManifestPermission, final int mPermissionCode, final String rational) { 
    if (ContextCompat.checkSelfPermission(mactivity, androidManifestPermission) != PackageManager.PERMISSION_GRANTED) { 
     Snackbar.make(mLayout, rational, Snackbar.LENGTH_LONG).setAction("OK", new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode); 
      } 
     }).show(); 
    } else { 
     ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode); <------ nothing happens when the flow reaches here 
    } 
} 

public static enum PERMISSIONS { 
    CAMERA_PERMISSION, 
    GPS_PERMISSION 
} 

Wenn Flusslinie erreicht ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode); nichts passiert.

Der Wert von mactivityMainActivity ist, ist der Wert von androidManifestPermission"android.permission.ACCESS_FINE_LOCATION".

Ich verstehe nicht, was das Problem ist.

Ich bemerkte etwas ziemlich Interessantes, das verwandt sein kann.

Die Funktion requestPermissions übernimmt eine Aktivität als erstes Argument. Aber der Aufruf onRequestPermissionsResult, den es ausführt, ist in der Schnittstelle ActivityCompat definiert. OnRequestPermissionsResultCallback

Wie kann das sein? Wie kann die Funktion requestPermissions den Rückruf onRequestPermissionsResult in Activity finden (das erste Argument)?

Vielleicht hängt das mit meinem Problem zusammen?

Ich habe versucht, meine Aktivität implementieren OnRequestPermissionsResultCallback natürlich. Als ich die Funktion mit @OverrideonRequestPermissionsResult annotierte beschwert sich der Compiler, dass die Funktion onRequestPermissionsResult (von der Schnittstelle OnRequestPermissionsResultCallback) eine Oberklasse nicht überschreibt.

Mein Hauptanliegen ist, dass ich das Betriebssystem nicht dazu bringen kann, die Erlaubnis vom Benutzer anzufordern.

Weiß jemand, was das Problem ist?

runOnUIThread

ich wie so requestPermissions auf dem UIThread versucht läuft (nicht funktioniert):

mactivity.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode); 
    } 
}); 

Antwort

1

Wenn Sie bereits Berechtigungen verfügen, die requestPermissions Methode wird die Berechtigungen Dialog nicht mehr anzeigen.

Wenn Sie noch nicht über die Berechtigungen verfügen, wird der Dialog angezeigt, der nach Berechtigungen fragt.

Nachdem der Dialog angezeigt wird und der Benutzer es erlaubt oder verweigert. Die Callback-Methode onRequestPermissionsResult in Ihrer Aktivität wird aufgerufen.

Sie können die Methode onRequestPermissionsResult nicht überschreiben, es sei denn, Sie befinden sich in einer Aktivität.

Sie können jedoch in Ihrer Hilfsklasse eine Methode erstellen, um die Berechtigungen zu delegieren.

In Ihrer Hilfsklasse:

public static void onRequestPermissionResult(/*params*/){ 
    //your code 
} 

Und in Ihrer Tätigkeit, überschreiben die Methode und übergeben es an Ihre Hilfsklasse:

@Override 
public void onRequestPermissionResult(/*params*/){ 
    PermissionsService.onRequestPermissionResult(/*params*/); 
} 

ich eine Berechtigungs Bibliothek aufgebaut haben, die verwendet werden können jemand. Sie können sich den Quellcode ansehen oder ihn direkt verwenden, indem Sie die Bibliothek importieren.

https://github.com/nabinbhandari/Android-Permissions

+0

Hallo. Ich habe versucht, das 'onRequestPermissionsResult' innerhalb der Aktivität zu überschreiben. Es sagt mir, dass 'Methode Methode von seiner Oberklasse nicht überschreibt' –

+0

Ich kenne das Problem, das ich habe. Danke;) –

+0

Wenn es geholfen hat, vergiss nicht, es als akzeptiert zu markieren. –