I have a serious issue about passing data from BroadcastReceiver
to an Activity
. Let see my issue carefully. I have a class PhoneStateReceiver extends BroadcastReceiver
that used to received an incoming phone.
public class PhoneStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
System.out.println("Receiver start");
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
}
}
catch (Exception e){
e.printStackTrace();
}
}
}
The incoming phone will be sent to an Activity
, called ReceiverActivity
. The ReceiverActivity
receives the incoming phone and sends it to a server via a socket connection. The socket connection is initialized in the onCreate
function. I googled and found server way to pass the data from BroadcastReceiver
to an Activity
. The common way is that send data via putExtra
function and call startActivity
. However, the way will call the onCreate
again and then connect the socket, draw the UI again. Thus, it is not helpful in my case.
In my goal, If the phone receives an incoming call, it will send the incoming call to the ReceiverActivity
. The ReceiverActivity
receives the message and calls the send function. Which is the best way to do it? Thank you
The common way to pass data from a BroadcastReceiver
to a ReceiverActivity
that I used as follows
In PhoneStateReceiver class :
Intent intent_phonenum = new Intent(context, ReceiverActivity.class);
intent_phonenum.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent_phonenum.putExtra("phone_num", incomingNumber);
context.startActivity(intent_phonenum);
In ReceiverActivity class :
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
connect_socket();
Intent intent = getIntent();
phone_num = intent.getStringExtra("phone_num");
send(phone_num);
}
pub/sub
usingEventBus
. – Latarsha