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)
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();
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)
listener.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