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

Erro Método onReceive

Galera, estou com o pequeno problema com o método onReceive. Já refiz e conferi todo o código mas quando faço os testes de envio de SMS o método não é chamado.

9 respostas

Oi Ricardo, tudo bem ?

Você pode postar seu código aqui para vermos ?

Abraços :)

Agora mesmo:

Essa é classe SmsReceiver:

public class SmsReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context contex, Intent intent) {
        Object[] mensagens = (Object[]) intent.getExtras().get("pdus");
        byte[] mensagem = (byte[]) mensagens[0]; //Pega ultima mensagem que chegou...

        SmsMessage sms = SmsMessage.createFromPdu(mensagem);//Facilita o trabalho com SMS
        String telefone = sms.getOriginatingAddress();
        //Toast.makeText(contex, "SMS de Aluno" + telefone, Toast.LENGTH_SHORT).show();

        //Verificando de quem é a mensagem
        boolean smsEhDeAluno = new AlunoDAO(contex).ehAluno(telefone);
        Toast.makeText(contex, "É aluno", Toast.LENGTH_LONG).show();
        if (smsEhDeAluno) {
            MediaPlayer musica = MediaPlayer.create(contex, R.raw.sms);
            musica.start();

        }
    }
}

No Manifest fiz as seguintes entradas:

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

   <receiver
            android:name=".SmsReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECIVED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

Segue as entradas no arquivo Manifest:

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

<receiver
            android:name=".SmsReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECIVED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
solução!

Oi Ricardo, tudo bem? O problema é uma letra!

No AndroidManifest, onde você colocou:

<action android:name="android.provider.Telephony.SMS_RECIVED" />

É SMS_RECEIVED, faltou um "E". Troca essa linha por:

<action android:name="android.provider.Telephony.SMS_RECEIVED" />

Testa e vê se funciona? Abraço.

Obrigado por responder mas, isso ainda não resolveu. O que me parece é que o método onReceive não é chamado.

Olá pesquisando um pouco mais encontrei essa mensagem no logcat:

11-30 15:12:26.494 277-294/? W/BroadcastQueue﹕ Permission Denial: receiving Intent { act=android.provider.Telephony.SMS_RECEIVED flg=0x10 (has extras) }

Oi Ricardo, já conseguiu resolver?

Lucas muito obrigado! Na verdade são duas entradas diferentes segue Manifest:

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

<receiver
            android:name=".SmsReceiver"
            android:enabled="true">
            <intent-filter android:priority="1">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

No uses-permission deve-se utilizar RECEIVE_SMS e no intent-filter SMS_RECEIVED.

Obrigado pela ajuda.

Isso! No seu caso o uses-permission já estava correto. :)

Que bom que funcionou! Agora você pode prosseguir o curso. Qualquer dúvida ou problema é só abrir um tópico no fórum.

Bons estudos!

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