Связь Android между Broadcast Receiver и MainActivity (отправка данных в активность) - PullRequest
5 голосов
/ 09 ноября 2010

У меня есть простое Основное действие, которое должно быть остановлено до получения SMS ... Как я могу запустить метод из MainActivity в onReceive() методе *1003*?

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

Ответы [ 4 ]

10 голосов
/ 09 ноября 2010

Общение с BroadcastReceiver для Activity очень обидчиво;Что делать, если действие уже прошло?

Если бы я был вами, я бы настроил новый BroadcastReceiver внутри действия, который получал бы сообщение ЗАКРЫТЬ:

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));

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

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

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

2 голосов
/ 02 ноября 2012

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

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

MainActivity.java

public static void stopsms()
{

/*
some code to stop the activity

*/

}

SMSReceiver.java

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

MainActivity.stopsms();

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

1 голос
/ 07 августа 2011

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

0 голосов
/ 07 мая 2012

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

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

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

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

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

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

...