Android-Laufzeitberechtigungen in Android 6.0 (API-Stufe 23) - Best Practices

Android-Laufzeitberechtigungen in Android 6.0 (API-Stufe 23) - Best Practices

Ich habe meiner App mit @ erfolgreich Berechtigungen für die Laufzeit hinzugefüg

Diese Erfrischungen

http: //developer.android.com/training/permissions/requesting.htm

un

https: //www.learn2crack.com/2015/10/android-marshmallow-permissions.htm

dies ist der Code, den ich verwendet habe

private static final int PERMISSION_REQUEST_CODE = 1;

    switch (id){
                case R.id.check_permission:
                    if (checkPermission()) {

                        Snackbar.make(view,"Permission already granted.",Snackbar.LENGTH_LONG).show();

                    } else {

                        Snackbar.make(view,"Please request permission.",Snackbar.LENGTH_LONG).show();
                    }
                    break;
                case R.id.request_permission:
                    if (!checkPermission()) {

                        requestPermission();

                    } else {

                        Snackbar.make(view,"Permission already granted.",Snackbar.LENGTH_LONG).show();

                    }
                    break;
            }

private boolean checkPermission(){
        int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);
        if (result == PackageManager.PERMISSION_GRANTED){

            return true;

        } else {

            return false;

        }
    }

    private void requestPermission(){

        if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.ACCESS_FINE_LOCATION)){

            Toast.makeText(context,"GPS permission allows us to access location data. Please allow in App Settings for additional functionality.",Toast.LENGTH_LONG).show();

        } else {

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

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    Snackbar.make(view,"Permission Granted, Now you can access location data.",Snackbar.LENGTH_LONG).show();

                } else {

                    Snackbar.make(view,"Permission Denied, You cannot access location data.",Snackbar.LENGTH_LONG).show();

                }
                break;
        }
    }

Die Best Practices von Android

http: //developer.android.com/training/permissions/best-practices.htm

state das folgende

1) Erwägen Sie die Verwendung einer Absicht

2) Fragen Sie nur nach den Berechtigungen, die Sie benötigen

3) Überfordert den Benutzer nicht

4) Erklären Sie, warum Sie Berechtigungen benötigen

Nun fragen wir nach den oben genannten Berechtigungen nur bei Bedarf und nur nach der spezifischen Berechtigung, die für diese Aktivität erforderlich ist.

JedochDiese Best Practices geben nicht die Häufigkeit der Erlaubnis an, dh wie oft diese Erlaubnis gezeigt werden muss oder kann sie nur einmal gezeigt werden

Jetzt ist das Problem, vor dem ich stehe,

1) Jedes Mal, wenn die Aktivität in der App aufgerufen wird, werden die Berechtigungen angezeigt. Dies geschieht für die jeweilige Sitzung der App-Nutzung (wenn dieselbe Aktivität in derselben Sitzung aufgerufen wird, wird die Berechtigung nicht aufgerufen, sobald sie erteilt wurde

2) Können erteilte Berechtigungen gespeichert werden (dh die statische Variable, die die erste Prüfung in gemeinsamen Einstellungen durchführt, damit Berechtigungen nicht immer wieder aufgerufen werden)

3) Müssen wir jedes Mal, wenn die App verwendet wird, den Berechtigungszugriff beantragen?

4) Wenn gemeinsame Einstellungen nicht erlaubt sind, wie wir diese Berechtigungen eleganter verwalten können

Antworten auf die Frage(2)

Ihre Antwort auf die Frage