Question

Je me demande si quelqu'un peut m'aider. J'essaie d'afficher un élément de pain grillé lorsqu'un SMS est reçu. Ce toast doit contenir une mise en page comportant une image (icône SMS) et 2 vues de texte (expéditeur, message)

Si j'appelle la méthode suivante à partir d'une activité, cela fonctionne comme prévu ...

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

Cependant, si j'essaie d'appeler le même code de la même manière depuis mon SMSReceiver, je reçois:

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

Quelqu'un peut-il s'il vous plaît indiquer comment je peux le faire d'une intention. Je suppose que le problème est en quelque sorte lié au multithreading, cependant, je ne sais pas comment procéder. J'ai déjà vu quelques exemples en ligne, mais ils semblent utiliser du code obsolète ou uniquement un texte simple.

Quelqu'un peut-il m'indiquer dans la bonne direction s'il vous plaît

Merci beaucoup

Était-ce utile?

La solution

Vous pouvez utiliser LayoutInflater.from (context) pour obtenir votre LayoutInflater. Comme ceci:

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

Autres conseils

Vos erreurs de compilation sont dues au fait que BroadcastReceiver n'hérite pas de Context . Utilisez le Context qui est passé dans onReceive () (et supprimez getApplicationContext () - utilisez simplement le Context vous êtes passé).

Maintenant, cela peut toujours ne pas fonctionner, car je ne suis pas sûr que vous puissiez générer un Toast à partir d'un BroadcastReceiver . , mais cela vous évitera au moins les erreurs de compilation.

Il est possible de créer et d’afficher un toast à partir d’une activité ou d’un service, et non d’un récepteur de diffusion

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top