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.
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.
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>
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!