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