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

Dúvida no Ex. 1 da Aula 1 - Completando nosso sistema: Intents

Olá, estou com uma dificuldade neste exercício, fica dando um erro de permissão no starctActivity mesmo após dar a permissão no AndroidManifest. E aproveitando, porque no video está diferente do exercício? Tentei fazer igual está no exercício, mas o app trava. E não entendi como ele chama a Activity daquela maneira.

Os códigos: onCreateContextMenu:

MenuItem ligar = menu.add("Ligar");
        ligar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

                Intent intentLigar = new Intent(Intent.ACTION_CALL);
                Uri telefoneDoAluno = Uri.parse("tel:" + alunoSelecionado.getTelefone());
                intentLigar.setData(telefoneDoAluno);
                startActivity(intentLigar);
                return false;
            }
        });
// demais

Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="greg.br.com.cadastroalunoscaelum">

    <uses-permission android:name="android.permission.CALL_PHONE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".ListaAlunosActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".FormularioActivity" />

    </application>

</manifest>

Desde já agradeço.

3 respostas

Grégori, tudo bem ?

Eu imagino que você esteja usando a API 23 do Android, melhor dizendo Android 6.0. Nessa versão do Android, temos muitas novidades, uma delas é a parte de permissões, o usuario não precisa mais, no momento que baixar ver o que o aplicativo usa e aceitar as permissões, agora ele instala o aplicativo e no momento que é necessário fazer algo que precise de permissão, o desenvolvedor deve informar o usuario do que pretende fazer, assim o usuario decide se vai dar a permissão ou não para o que o aplicativo necessita.

Precisamos fazer a chamada para dois métodos para fazermos essa verificação :

requestPermissions(String[] permissoes, int codigo)

Esse metodo está recebendo as permissões que serão necessárias e recebe um código para as identificar.

Para verificarmos se o usuario permitiu chamamos este método :

onRequestPermissionsResult(int codigo, String[] permissoes, int[] resultados )

Aqui ele retorna o mesmo código que passamos para ele no requestPermissons, o mesmo array de String e agora ele recebe um array de int que está com os resultados, se foram ou não aceitos pelo usuario.

Disso podemos fazer o seguinte, se forem aceitas podemos então iniciar nosso procedimento, que no caso é fazer uma ligação.

Espero ter sanado suas dúvidas, se precisar estou a disposição.

Abraços !

Trocar para API 22 resolveria? Pois tentei e deu alguns erros de referencias, como no setContentView, ele não reconhece a classe R

Senão, poderia me ajudar com estes métodos que você citou, não sei direito como implementá-los.

Grato.

solução!

Gregori,

Fazendo o request :

    // codigo do onCreateContextMenu
    // aqui verifico se a minha permissão já foi aceita, se não entra nesse if
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

            // aqui informo quais são as permissões que quero que o usuario valide.
            String[] permissoes = {Manifest.permission.CALL_PHONE};

        // nesse momento eu faço o request para obter as permissões
        requestPermissions(permissoes, 123);


            return;
        }
    startActivity(intentLigar);

}

Nesse instante é criado um Alert para o usuario com uma mensagem parecida com isto : " a aplicação quer fazer ligações você permite ? " , e dois botões um para aceitar e outro recusar, agora precisamos ver o que nosso usuario colocou para nós.

Pegando a resposta do usuario :


public class MinhaActivity extends AppCompatActivity {


      @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {


    // verificando se foi a ligação que chamou esse método
    if(requestCode == 123) {
        //sabemos que só pode ter um resultado nesse caso
        int resultado == grantResults[0];


        if (resultado == PackageManager.PERMISSION_GRANTED ){
            //fazemos o que queremos que aconteceça
        }

    }


    }

//restante do código



}

Espero ter ajudado !

Abraços

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software