Search code examples
androidbroadcastreceiverinner-classes

Call an activity method from a BroadcastReceiver class


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 that extends broadcast receiver but who isn't an inner class. And can call one method from my main activity. I don't know if it's possible but my activity is a Home activity and a "singleInstance" activity so maybe with this detail someone has a way to access to my activity.

If it's impossible any way to split some java code in multiple files my main have more than 600 lines. (and for information I have already 19 java files for an alpha version of my apps so I have try to split it)


Solution

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