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

Toast com a mensagem "Chegou um SMS de Aluno..." não aparece.

Olá,

Abaixo meu código da classe SmsReceiver.

Quando envio um SMS para o número de um aluno, o toast com a mensagem "Chegou um SMS de Aluno..." não aparece.

Quando tiro o comentário do toast com a mensagem "Chegou um SMS de..." então aparece o número do telefone no formato "+5561...", considerando meu DDD 61.

Editei o número do telefone para esse formato, mas mesmo assim o toast desejado não aparece.

Não entendi porque o código dentro if não está sendo executado.

SmsReceiver.java:

public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Object[] pdus = (Object[]) intent.getSerializableExtra("pdus");
        byte[] pdu = (byte[]) pdus[0];
        String formato = (String) intent.getSerializableExtra("format");

        SmsMessage sms = SmsMessage.createFromPdu(pdu, formato);

        String telefone = sms.getDisplayOriginatingAddress();
//        Toast.makeText(context, "Chegou um SMS de " + telefone + " !", Toast.LENGTH_LONG).show();
        AlunoDAO dao = new AlunoDAO(context);
        if (dao.isAluno(telefone)) {
            Toast.makeText(context, "Chegou um SMS de Aluno (" + telefone + ") !", Toast.LENGTH_SHORT).show();
            MediaPlayer mp = MediaPlayer.create(context, R.raw.msg);
            mp.start();
        }
        dao.close();
    }
}

AlunoDAO.java:

public boolean isAluno(String telefone) {

        String sql = "SELECT * FROM Alunos WHERE telefone = ?";
        Cursor cursor = getReadableDatabase().rawQuery(sql, new String[]{telefone});

        int count = cursor.getCount();

        cursor.close();

        return count > 1;
    }
2 respostas
solução!

Olá Cassius, tudo bem ?

O problema tá no seu Dao, é bem pequeno o detalhe.

Quando fazemos a busca, ele provavelmente deve encontrar apenas um aluno, dá uma olhadinha no retorno do seu método isAluno() :

return count > 1;

Nesse caso 1 não é maior 1, acredito que você deseja fazer ser igual ou maior 1, caso contrário, maior que zero.

Faz essa alteração e fala para gente se deu certo.

Abraços

Olá,

Sim, obrigado pela ajuda.

public boolean isAluno(String telefone) {

        String sql = "SELECT * FROM Alunos WHERE telefone = ?";
        Cursor cursor = getReadableDatabase().rawQuery(sql, new String[]{telefone});

        int count = cursor.getCount();

        cursor.close();

        return count > 0;
    }

Uma observação: no comentário do instrutor, esse código está como "return count > 1;" ; o código no GitHub está correto.