Frage

Ich frage mich, ob jemand kann mir helfen. Ich versuche, einen Toast Element angezeigt wird, wenn eine SMS empfangen wird. Dieser Toast soll ein Layout enthalten, die ein Bild (SMS-Symbol) hat und 2 Textviews (Absender, message)

Wenn ich die folgende Methode aus einer Tätigkeit nennen, funktioniert es wie erwartet ...

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

Allerdings, wenn ich versuche, von meinem SMSReceiver den gleichen Code auf die gleiche Weise zu nennen, die ich erhalten:

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

Kann jemand bitte beraten, wie ich tihs von einer Absicht tun. Ich nehme an, das Problem irgendwie verwandt ist zu Verkanten aber ich bin nicht sicher, wie es weitergeht. Ich habe Online ein paar Beispiele gesehen, aber sie scheinen entweder Gebrauch veraltete Code oder nur einfachen Text anzeigen

Kann mir bitte jemand in die richtige Richtung zeigen

Vielen Dank

War es hilfreich?

Lösung

Sie können mit LayoutInflater.from (Kontext) Ihre LayoutInflater bekommen. Wie folgt aus:

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

Andere Tipps

Ihre Kompilierung Fehler sind da BroadcastReceiver nicht von Context nicht erben. Verwenden Sie die Context, die in onReceive() übergeben wird (und werde getApplicationContext() los - benutzen Sie einfach die Context Sie übergeben werden).

Nun, dies kann noch nicht funktioniert, wie ich bin nicht sicher, ob Sie eine Toast von einem BroadcastReceiver in erster Linie erhöhen können, aber dies zumindest werden Sie vorbei an den kompilieren Fehler erhalten.

Ein Toast kann von einer Aktivität oder Dienstleistung, nicht Broadcast-Empfänger

erstellt und angezeigt wird
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top