I have 2 activities running. Activity A is started first followed by Activity B. (ie A in stack, B in focus). I have BroadcastReceiver running on both activities. The problem is only Activity A is able to capture my broadcast messages (using sendBroadcast)
Why is this so? How can I enable both activities to receive the broadcast without terminating (calling finish on Activity A)
Also, is there any way I can reuse the Broadcast receiver method in Activity A?
Broadcast Activity
Intent intent = new Intent(MESSAGE_UPDATE);
intent.putExtra("message", message);
sendBroadcast(intent);
Activity A
@Override
public void onResume() {
super.onResume();
if(resumeHasRun==false){
IntentFilter movementFilter;
movementFilter = new IntentFilter();
movementFilter.addAction(NewService.MESSAGE_UPDATE);
registerReceiver(mIntentReceiver, movementFilter);
resumeHasRun=true;
return;
}
}
public BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
updateTable(message);
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mIntentReceiver);
}
public void startNewActivity(){
Intent newIntent = new Intent(getApplicationContext(),ActivityB.class);
startActivity(newIntent);
//never call finish
}
Activity B
@Override
public void onResume() {
super.onResume();
if(resumeHasRun==false){
IntentFilter movementFilter;
movementFilter = new IntentFilter();
movementFilter.addAction(NewService.MESSAGE_UPDATE);
registerReceiver(mIntentReceiver, movementFilter);
resumeHasRun=true;
return;
}
}
public BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
updateAnotherTable(message);
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mIntentReceiver);
}
Move:
Make (in its own file):
Make your activities implement TableUpdateReceiver.Listener and: