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.