广播接收器和MainActivity之间的Android通信(向activity发送数据)

广播接收器和MainActivity之间的Android通信(向activity发送数据),android,android-activity,sdk,broadcast,Android,Android Activity,Sdk,Broadcast,我有一个简单的主要活动,必须停止,直到收到短信。。。如何从BroadcastReceiver的onReceive()方法中的main活动启动方法 有没有信号和等待?我是否可以传递带有挂起的意图的内容,或者我如何实现这种通信?从广播接收器到活动的通信是敏感的;如果活动已经结束了怎么办 如果我是你,我会在活动中设置一个新的BroadcastReceiver,它会收到一条关闭消息: private BroadcastReceiver closeReceiver; // ... closeReceive

我有一个简单的主要活动,必须停止,直到收到短信。。。如何从
BroadcastReceiver
onReceive()方法中的
main活动
启动方法


有没有信号和等待?我是否可以传递带有挂起的
意图的内容
,或者我如何实现这种通信?

从广播接收器到活动的通信是敏感的;如果活动已经结束了怎么办

如果我是你,我会在活动中设置一个新的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));
然后,您可以从SMS广播接收器发送以下操作:

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

我希望这能有所帮助?

但是,在活动中注册第二个接收者的问题是,它不会像在清单中注册那样持久。。。因此,尽管此解决方案可能有效,但仅当活动在后台运行时才有效。

使用如下界面很简单:

1) 在广播接收器中创建一个接口

public interface ChangeListener{
    public void functionWhoSendData(String type);
    public void etc();
}
并在广播接收器中实例化该接口,使用它:

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

在您的活动中,让它实现您的界面

我遇到了完全相同的问题,我尝试使用intent,但没有成功

使用它最简单的方法是使用静态方法和静态变量

MainActivity.java

public static void stopsms()
{

/*
some code to stop the activity

*/

}
SMSReceiver.java

public static void stopsms()
{

/*
some code to stop the activity

*/

}
最后调用此函数

MainActivity.stopsms();

如果您的代码在使用静态方法和变量时不受影响,那么它的效果会非常好。如果您需要帮助,请告诉我。

Mhm…我正在直接在舱单中注册收件人。。。需要和接收器交换数据…没问题。这些数据可以通过额外的方式发送。i、 putExtra(“名称”、“价值”);只能传递基元类型。快速修复:
context.sendBroadcast(i)它必须使用BroadcastReceiver上下文来传播意图。这似乎更适合作为注释而不是答案。有没有办法从静态void函数访问mainactivity上下文?对活动调用静态方法是否不危险?如果该活动不再存在怎么办?当我这样做时,我会得到ClassCastException。显然,onReceive中的上下文无法转换到接口。