A partir da API 23 (Android Marshmallow), o usuário tem o controle de aceitar individualmente as permissões que o aplicativo solicita. Portanto, além de colocar as uses-permission no manifest, é necessário solicitar todas as permissões individualmente ao usuário. Para isso, temos que criar um código parecido com o que está abaixo:
//Crie um array com as permissões necessárias
private String[] permissoesNecessarias = new String[] {
android.Manifest.permission.SEND_SMS,
android.Manifest.permission.INTERNET
};
//Crie uma classe para checar se as permissões foram aceitas
public class Permissao {
public static boolean validaPermissoes(int requestCode, Activity activity, String[] permissoes) {
if(Build.VERSION.SDK_INT >= 23) {
List<String> listaPermissoes = new ArrayList<>();
//Percorre as permissões passadas, verificando uma a uma se já tem a permissão liberada
for (String permissao : permissoes) {
Boolean validaPermissao = ContextCompat.checkSelfPermission(activity, permissao) == PackageManager.PERMISSION_GRANTED;
if(!validaPermissao) listaPermissoes.add(permissao);
}
if(listaPermissoes.isEmpty()) return true;
//Solicita permissão
ActivityCompat.requestPermissions(activity, listaPermissoes.toArray(new String[0]), requestCode);
}
return true;
}
}
//Gera AlertDialog para avisar que o Usuário só pode usar o App se aceitar as permissões
private void alertaValidacaoPermissao() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Permissões negadas");
builder.setMessage("Para utilizar este app, é necessário aceitar as permissões");
builder.setPositiveButton("CONFIRMAR", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
//Tratar Negação de Permissão
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResult) {
super.onRequestPermissionsResult(requestCode, permissions, grantResult);
for(int resultado : grantResult) {
if(resultado == PackageManager.PERMISSION_DENIED) {
alertaValidacaoPermissao();
}
}
}
Marcadores
actionbar
(3)
adapter
(1)
android
(17)
android studio
(4)
atalhos
(1)
collections framework
(1)
ContextMenu
(1)
custom application
(1)
DAO
(1)
eclipse
(1)
erro
(1)
fatorial
(1)
fibonacci
(1)
fragments
(1)
git
(3)
GitHub
(2)
ícones
(2)
intent-filter
(1)
java
(4)
jsf
(1)
listview
(1)
máscara
(1)
MaskFormatter
(1)
material design
(2)
menu suspenso
(1)
permissões
(1)
plugin
(1)
RadioButton
(1)
recursividade
(1)
singleton
(1)
SQLite
(1)
SQLiteOpenHelper
(1)
startActivityForResult
(1)
toolbar
(1)
xml
(3)
terça-feira, 7 de fevereiro de 2017
Solicitar e Tratar Permissões para API 23 ou superior
Assinar:
Postar comentários (Atom)
Este comentário foi removido pelo autor.
ResponderExcluirEsse código teria que ser colocado todo dentro do método onCreate?
ResponderExcluir