Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida Permissão sdk 23

Boa tarde,

Estou fazendo esse curso pelo Android Studio 1.5, estou na parte que pede permissão para fazer uma chamada telefonica, o problema é que nessa nova versão tem que criar um método para solicitar a permissão, não é mais apenas pelo manifest, estou pesquisando e tentando resolver mas até agora sem sucesso. Alguém poderia me ajudar?

Obs: Caso eu consiga eu posto aqui.

5 respostas
solução!

Após muito sofrimento consegui rs.

Na minha classe ListaAlunosActivity adicionei no inicio:

public static final int permissao_call = 1; private Helper h; private Boolean permissaoCall = false;

Meu evento de click em ligar ficou assim: ligar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Intent iLigarAluno = new Intent(Intent.ACTION_CALL);

Uri foneAluno = Uri.parse("tel:" + aluno.getTelefone()); iLigarAluno.setData(foneAluno);

if (!permissaoCall) h.requestPermission(permissao_call); // fazer essa chamada de request permission assync em breve.

if (permissaoCall == true){ Toast.makeText(actx, "Estamos completando sua ligação!", Toast.LENGTH_SHORT).show(); startActivity(iLigarAluno); }

return false; } });

E no final da minha ListaAlunosActivity eu sobrescrevo o método:

@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case permissao_call: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Snackbar.make(actx.findViewById(R.id.lista_alunos), "Permissao concedida.", Snackbar.LENGTH_LONG).show(); permissaoCall = true; } else {

Snackbar.make(actx.findViewById(R.id.lista_alunos),"Permissão negada, não será possível executar a operação.",Snackbar.LENGTH_LONG).show(); permissaoCall = false; } break; } }

E esse Helper que instancio no inicio da ListaAlunosActivity , é uma nova classe que criei pra gerenciar esse tipo de coisa, e segue o conteudo da mesma.

private Activity actx; private String tPermissao; private int numPermissao;

public Helper(Activity acti){ actx = acti; }

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

return true;

} else {

return false;

} }

public void requestPermission(int tipoPermissao) { numPermissao = tipoPermissao;

switch (numPermissao) { case 1: tPermissao = Manifest.permission.CALL_PHONE; break; case 2: tPermissao = Manifest.permission.ACCESS_FINE_LOCATION; }

if (ActivityCompat.shouldShowRequestPermissionRationale(actx, tPermissao)){

Toast.makeText(actx, "É necessária uma permissão para utilizar essa funcionalidade.", Toast.LENGTH_LONG).show();

} else {

ActivityCompat.requestPermissions(actx,new String[]{tPermissao}, numPermissao); } }

Bom, é isso ai. Ainda tem bastante coisa pra melhorar nesse fonte, poderia utilizar enum nas permissões, fazer uma chamada assync no requestpermissions, assim não precisaria clicar 2x, entre outros. Mas essas são coisas que vou implementar mais pra frente, por hora é o suficiente para eu seguir com o curso, utilizando o Android Studio.

Ah sim, e no meu manifest tive que adicionar a permissão:

<?xml version="1.0" encoding="utf-8"?>

Alguém edita por favor, não deu certo pra postar o xml kkkk

uses-permission android:name="android.permission.CALL_PHONE"

private Helper h;

???? Quem é esse Helper