Question

I wonder if someone can help me. I'm trying to display a toast element when an SMS is received. This toast should contain a layout which has an image (SMS Icon) and 2 textviews (sender, message)

If I call the following method from an activity, it works as expected...

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

However, if I try to call the same code in the same way from my SMSReceiver, I get:

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

Can someone please advise how I can do tihs from an intent. I assume the issue is somehow related to cross-threading however, I'm unsure how to proceed. I've seen a couple of examples online but they seem to either use deprecated code or only display simple text

Can someone please point me in the correct direction

Many thanks

Was it helpful?

Solution

You can use LayoutInflater.from(context) to get your LayoutInflater. Like this:

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

OTHER TIPS

Your compile errors are because BroadcastReceiver does not inherit from Context. Use the Context that is passed into onReceive() (and get rid of getApplicationContext() -- just use the Context you are passed).

Now, this may still not work, as I am not sure if you can raise a Toast from a BroadcastReceiver in the first place, but this will at least get you past the compile errors.

A toast can be created and displayed from an Activity or Service, not Broadcast receiver

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top