Show Complex Toast From BroadcastReceiver
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
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);
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
精彩评论