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

SMS chega, mas o TOAST não é exibido

Pessoal, boa tarde. Conseguem me ajudar?

Em minha aplicação o Toast não está sendo apresentado, embora o SMS chega normalmente:

Arquivo AndroidManifest.XML

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="aluracursoandroid.com.agenda">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        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"></activity>
        <receiver android:name=".receiver.SMSReceiver">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="aluracursoandroid.com.agenda.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>
    </application>
</manifest>

Classe SMSReceiver

package aluracursoandroid.com.agenda.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class SMSReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Chegou um SMS!", Toast.LENGTH_SHORT).show();
    }
}
2 respostas

Achei que era devido à digitação errado abaixo, mas corrigi e permaneço sem receber o Tost.

Debugando a aplicação verifiquei que não entra no OnReceive().

Código errado no Manifest (RECEIVE_MMS):

<uses-permission android:name="android.permission.RECEIVE_MMS"/>
solução!

SOLUÇÃO:

Não basta somente colocar a permissão e receiver no AndroidManifest.XML. Deve ser colocado também na Activity principal (ListaAlunosActivity.java), no método OnCreate o trecho que verifica se a permissão de SMS está ativa (aula 08 -Desafio: Pedindo as permissões de SMS ao abrir a aplicação):

         //Verificado se a permissão de SMS está ativa, caso contrário, peça a permissão para o usuário!
        if (checkSelfPermission(Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED){
            requestPermissions(new String[] { Manifest.permission.RECEIVE_SMS } , 456);
        }

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