Связь Android между широковещательным приемником и MainActivity (передача данных в действие)

У меня есть простая Основная деятельность, которая должна останавливаться до получения SMS … Как запустить метод из MainActivity в onReceive() BroadcastReceiver ?

Есть ли прочь с сигналом и ждать? Могу ли я передать что-то с ожидающим Intent или как я могу реализовать это сообщение?

Коммуникация от BroadcastReceiver to Activity вызывает раздражение; Что, если деятельность уже исчезла?

Если бы я был вами, я бы создал новый BroadcastReceiver внутри Activity, который получил бы сообщение CLOSE:

 private BroadcastReceiver closeReceiver; // ... closeReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //EDIT: receiving parameters String value = getIntent().getStringExtra("name"); //... do something with value finish(); } }; registerReceiver(closeReceiver, new IntentFilter(CLOSE_ACTION)); 

Затем из SMS BroadcastReceiver вы можете отправить это действие:

 Intent i = new Intent(CLOSE_ACTION); i.putExtra("name", "value"); //EDIT: this passes a parameter to the receiver context.sendBroadcast(i); 

Надеюсь, это поможет?

У меня была такая же проблема, я попытался использовать намерение, но я не увенчался успехом

Самый простой способ использовать его – использовать статические методы и статические переменные

MainActivity.java

 public static void stopsms() { /* some code to stop the activity */ } 

SMSReceiver.java

В конце вызов этой функции

 MainActivity.stopsms(); 

Он отлично работает, если ваш код не влияет на использование статических методов и переменных. Дайте мне знать, если вам нужна помощь.

Однако проблема с регистрацией второго приемника в рамках действия заключается в том, что он не будет постоянным, как регистрация в манифесте … таким образом, хотя это решение может работать, будет работать только в том случае, если активность работает в фоновом режиме.

Это просто, используйте интерфейс:

1) в вашем широковещательном приемнике создайте интерфейс.

 public interface ChangeListener{ public void functionWhoSendData(String type); public void etc(); } 

И создайте этот интерфейс в своем широковещательном приемнике, используйте его:

 public void onReceive(.... String data=functionWhereYouReceiveYouData(); ChangeListener.functionWhoSendData(data); } 

И в своей деятельности, чтобы он реализовал ваш интерфейс