Salman Khan Salman Khan -4 years ago 145
Android Question

How to update UI in a BroadcastReceiver

I created an application in which I registered a broadcast receiver within my main class(

Main Activity
) and whenever I receive something in my
I want to update UI for e.g. I want to show an alert box or set some text view of my
. I receive all the values in my receiver but unable to set them, can somebody help me so that I can update my UI in the

My BroadcastReceiver class is inner class of MainActivity like this :-

public class MainActivity extends Activity {


public static class NissanTabBroadcast extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
SharedPreferences shrd = context.getSharedPreferences("NissanGallery", context.MODE_WORLD_READABLE);
type = shrd.getString("type", "null");
badges = shrd.getString("badge_count", "null");

/*Editor edit = shrd.edit();

Toast.makeText(context, "" + type + "\n" + badge_tips_text.getText().toString(), Toast.LENGTH_LONG).show();

Any help will be appreciable


Answer Source

I suggest you use a Handler.

  1. Initialize a Handler in the Activity, example: handler = new Handler()
  2. Provide the handler to the BroadcastReceiver in the constructor, in the same way as I did for NissanTabBroadcast above
  3. Use post() method of your Handler instance in the onReceive() method to submit the Runnable that updates the UI

This is the cleanest solution I can imagine.

public class MainActivity extends Activity {

    private MyReceiver receiver;

    public void onCreate(Bundle savedInstanceState) {

        receiver = new MyReceiver(new Handler()); // Create the receiver
        registerReceiver(receiver, new IntentFilter("some.action")); // Register receiver

        sendBroadcast(new Intent("some.action")); // Send an example Intent

    public static class MyReceiver extends BroadcastReceiver {

        private final Handler handler; // Handler used to execute code on the UI thread

        public MyReceiver(Handler handler) {
            this.handler = handler;

        public void onReceive(final Context context, Intent intent) {
            // Post the UI updating code to our Handler
   Runnable() {
                public void run() {
                    Toast.makeText(context, "Toast from broadcast receiver", Toast.LENGTH_SHORT).show();
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download