У меня есть серьезная проблема с передачей данных от BroadcastReceiver
до Activity
. Давайте внимательно посмотрим на мою проблему. У меня есть класс PhoneStateReceiver extends BroadcastReceiver
, который использовался для приема входящего телефона.Как передавать данные из BroadcastReceiver в Activity без in onCreate()
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();
}
}
}
Входящий телефон будет отправлен в Activity
, называется ReceiverActivity
. ReceiverActivity
принимает входящий телефон и отправляет его на сервер через соединение сокета. Соединение сокета инициализируется в функции onCreate
. Я googled и нашел способ сервера передать данные от BroadcastReceiver
до Activity
. Общим способом является передача данных через putExtra
и вызов startActivity
. Однако этот способ снова вызовет onCreate
, а затем подключит сокет, снова нарисуйте интерфейс. Таким образом, это не полезно в моем случае.
В моей цели Если телефон получает входящий звонок, он отправит входящий вызов на номер ReceiverActivity
. ReceiverActivity
принимает сообщение и вызывает функцию отправки. Каков наилучший способ сделать это? Спасибо
Распространенный способ передачи данных из BroadcastReceiver
в ReceiverActivity
, что я использовал следующие
В PhoneStateReceiver класс:
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);
В ReceiverActivity Класс:
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', используя' EventBus'. –
Я думаю, что это отличный ответ. Я тестировал и работал хорошо. Я просто прошу еще одну вещь о функции onStop. Потому что мое приложение можно запустить в фоновом режиме или в качестве службы. С этой целью PhoneStateReceiver по-прежнему получает входящий телефон. Можно ли принимать входящий телефон в Управлении, когда телефон находится в фоновом режиме или работает в службе? Я хочу спросить об этом, потому что, когда я нажимаю кнопку «Домой», данные не отправляются в Activity – Jame
Ну, если вы хотите передать информацию из вашего ресивера на ваш сервис (когда приложение закрыто и работает в фоновом режиме) вы можете просто сделать то же самое в своем фоновом сервисе, что и в своей деятельности. Хорошая вещь о EventBus, вы можете использовать его с услугами, действиями, фрагментами и т. Д. – Eenvincible