Search code examples
javaandroiduser-interfacebackgroundtextview

Android BroadcastReceiver onReceive Update TextView in MainActivity


In MainActivity I have a TextView: textV1. I also have a method in MainActivity that updates that textview:

public void updateTheTextView(final String t) {
    MainActivity.this.runOnUiThread(new Runnable() {
        public void run() {
            TextView textV1 = (TextView) findViewById(R.id.textV1);
            textV1.setText(t);
        }
    });
}

In a BroadcasrReceiver I need to update the text in textV1 in MainActivity.

public class NotifAlarm extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
            // other things done here like notification

            // NEED TO UPDATE TEXTV1 IN MAINACTIVITY HERE
    }
}

How can this be done? The BroadcastReceiver is run from a service. This code I cannot change. Can I access and change textV1 in MainActivity from onReceive()? I've tried many things but all fail.


Solution

  • In your MainActivity initialize a variable of MainActivity class like below.

    public class MainActivity extends Activity {
        private static MainActivity ins;
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ins = this;     
        }
    
        public static MainActivity  getInstace(){
            return ins;
        }
    
        public void updateTheTextView(final String t) {
            MainActivity.this.runOnUiThread(new Runnable() {
                public void run() {
                    TextView textV1 = (TextView) findViewById(R.id.textV1);
                    textV1.setText(t);
                }
            });
        }
    }
    
    
    public class NotifAlarm extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                MainActivity  .getInstace().updateTheTextView("String");
            } catch (Exception e) {
    
            }           
        }
    }