Call an activity method from a BroadcastReceiver class

后端 未结 2 1842
予麋鹿
予麋鹿 2020-11-30 08:05

I know I can do an inner receiver class to call any method from my receiver

But my main activity is too damn big and does a lot of things. So I will need a class t

相关标签:
2条回答
  • 2020-11-30 08:51

    Create the BroadcastReceiver dynamically:

    In your BroadcastReceiver class define class member:

    YourMainActivity yourMain = null;  
    

    and method:

    setMainActivityHandler(YourMainActivity main){
    yourMain = main;
    }  
    

    from your MainActivity do:

    private YourBroadcastReceiverClassName yourBR = null;
    yourBR = new YourBroadcastReceiverClassName();
        yourBR.setMainActivityHandler(this);    
        IntentFilter callInterceptorIntentFilter = new           IntentFilter("android.intent.action.ANY_ACTION");
        registerReceiver(yourBR,  callInterceptorIntentFilter);
    

    finally, when yourBR.onReceive is fired you can call:

    yourMain.methodOfMainActivity();
    
    0 讨论(0)
  • 2020-11-30 08:52

    #Make your BroadcastReceiver independent of Activity Making a BroadcastReceiver inner class of an Activity so that it can access UI elements from its onReceive() method just does not make sense. If you do so you can not reuse the BroadcastReceiver with any other activity. And you will end up writing almost same code again and again.
    A better way of doing this would be, make a Callback for BroadcastReceiver and let Your Activity subscribe this Callback.

    How do I do that?

    1) Create a CallBack interface

    public interface ReceiverCallback{
    
          public void doSomething(Object object);
    
    }
    

    2) Provide your Callback in the BroadcastReceiver

    public class MyBroadcastReceiver extends BroadcastReceiver {
    
         private ReceiverCallback callback;
    
         public MyBroadcastReceiver(ReceiverCallback callback){
    
              this.callback = callback;        //<--Initialize this
         }
    
         @Override
         public void onReceive(Context context, Intent intent) {
      
               // Your listening logic goes here (New WIFI Scan data available, 
                                                  Headphone plugged in etc)              
    
              // Send any data or No data(null)
              callback.doSomething(null);             //<--Send callback event
    
         }
    }
    

    3) Subscribe Your Activity for CallBack events:

    public YourActivity extends AppCompatActivity implements ReceiverCallback{
    
          // Your Activity code 
    
          public void updateUI() {     //<-- You want this to get Triggered 
                 // Update UI code 
          }
    
          @Override
          public void doSomething(Object object){     
                updateUI();            //<-- Callback does that
          }
    
    }
    

    ##Relevant Link: Read a more detailed discussion HERE

    0 讨论(0)
提交回复
热议问题