Domanda

Mi chiedo se qualcuno mi può aiutare. Sto cercando di visualizzare un elemento toast quando viene ricevuto un SMS. Questo brindisi dovrebbe contenere un layout che ha un'immagine (icona SMS) e 2 visualizzazioni di testo (mittente, messaggio)

Se chiamo il seguente metodo da un'attività, funziona come previsto ...

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();
}

Tuttavia, se provo a chiamare lo stesso codice nello stesso modo dal mio SMSReceiver, ottengo:

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

Qualcuno può avvisare come posso fare cose da un intento. Presumo che il problema sia in qualche modo legato al cross-threading, tuttavia non sono sicuro di come procedere. Ho visto un paio di esempi online ma sembrano usare codice deprecato o visualizzare solo testo semplice

Qualcuno può indicarmi la direzione corretta

Mille grazie

È stato utile?

Soluzione

Puoi usare LayoutInflater.from (contesto) per ottenere LayoutInflater. In questo modo:

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);

Altri suggerimenti

I tuoi errori di compilazione sono dovuti al fatto che BroadcastReceiver non eredita da Context . Usa il Context passato in onReceive () (e sbarazzati di getApplicationContext () - usa semplicemente Context sei passato).

Ora, questo potrebbe ancora non funzionare, poiché non sono sicuro che tu possa sollevare un Toast da un BroadcastReceiver in primo luogo , ma questo almeno ti farà superare gli errori di compilazione.

Un brindisi può essere creato e visualizzato da un'attività o un servizio, non da un destinatario di trasmissione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top