Pregunta

Me pregunto si alguien puede ayudarme. Estoy intentando mostrar un elemento de brindis cuando se recibe un SMS. Este brindis debe contener un diseño que tenga una imagen (icono de SMS) y 2 vistas de texto (remitente, mensaje)

Si llamo al siguiente método desde una actividad, funciona como se espera ...

public void showToast(Context context, String name, String message) {
    LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.toast_sms,
                                   (ViewGroup) findViewById(R.id.toast_sms_root));

    TextView text = (TextView) layout.findViewById(R.id.toastsms_text);
    text.setText(message);

    Toast toast = new Toast(getApplicationContext());
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
    toast.setDuration(Toast.LENGTH_LONG);
    toast.setView(layout);
    toast.show();
}

Sin embargo, si trato de llamar al mismo código de la misma manera desde mi SMSReceiver, obtengo:

The method getLayoutInflater() is undefined for the type SmsReceiver
The method findViewById(int) is undefined for the type SmsReceiver
The method getApplicationContext() is undefined for the type SmsReceiver

¿Alguien puede, por favor, aconsejar cómo puedo hacer esto desde un intento? Supongo que el problema está relacionado de alguna manera con el enlace cruzado, sin embargo, no estoy seguro de cómo proceder. He visto un par de ejemplos en línea pero parece que usan un código en desuso o solo muestran un texto simple

¿Alguien me puede indicar la dirección correcta?

Muchas gracias

¿Fue útil?

Solución

Puedes usar LayoutInflater.from (context) para obtener tu LayoutInflater. Así:

LayoutInflater mInflater = LayoutInflater.from(context);
View myView = mInflater.inflate(R.layout.customToast, null);
TextView sender = (TextView) myView.findViewById(R.id.sender);
TextView message = (TextView) myView.findViewById(R.id.message);

Otros consejos

Sus errores de compilación se deben a que BroadcastReceiver no hereda de Context . Use el Context que se pasa a onReceive () (y deshágase de getApplicationContext () ; simplemente use el Context se pasa).

Ahora, esto puede que todavía no funcione, ya que no estoy seguro de que pueda generar un Toast desde un BroadcastReceiver en primer lugar , pero al menos esto te ayudará a superar los errores de compilación.

Un brindis se puede crear y mostrar desde una Actividad o Servicio, no un receptor de difusión

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top