Permissões de tempo de execução do Android nas práticas recomendadas do Android 6.0 (API nível 23)

Permissões de tempo de execução do Android nas práticas recomendadas do Android 6.0 (API nível 23)

Adicionei permissões com êxito no tempo de execução ao meu aplicativo usando

Essas referências

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

e

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

este é o código que eu usei

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;
        }
    }

As melhores práticas fornecidas pelo Android

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

indique o seguinte

1) Considere usar uma intenção

2) Peça apenas as permissões necessárias

3) Não sobrecarregue o usuário

4) Explique por que você precisa de permissões

Agora, seguindo o exemplo acima, solicitamos permissões apenas quando necessário e apenas a permissão específica exigida por essa atividade

ContudoEssas práticas recomendadas não indicam a frequência da permissão, ou seja, dizer quantas vezes essa permissão precisa ser mostrada ou pode ser mostrada apenas uma vez.

agora o problema que estou enfrentando é

1) cada vez que a atividade é chamada no aplicativo, as permissões são exibidas. Isso acontece para aquela sessão específica de uso do aplicativo (se a mesma atividade for chamada durante a mesma sessão, a permissão não será solicitada depois de concedida)

2) Podemos armazenar permissões concedidas (ou seja, a variável estática que executa a primeira verificação na preferência compartilhada, para que as permissões não sejam chamadas repetidamente)

3)Precisamos solicitar o acesso de permissão sempre que o aplicativo for usado

4) Se as preferências compartilhadas não forem permitidas, como podemos gerenciar essas permissões com mais elegância

questionAnswers(1)

yourAnswerToTheQuestion