5

我有一个简单的 Main Activity 必须停止,直到收到 SMS...如何从方法中MainActivity启动方法BroadcastReceiveronReceive()

有没有信号和等待?我可以传递带有 pending 的东西Intent,或者我该如何实现这种通信?

4

4 回答 4

10

从 BroadcastReceiver 到 Activity 的通信很棘手;如果活动已经消失了怎么办?

如果我是你,我会在 Activity 中设置一个新的 BroadcastReceiver,它会收到一条 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);

我希望这有帮助?

于 2010-11-09T16:41:46.463 回答
2

我有完全相同的问题,我尝试使用意图但我没有成功

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

MainActivity.java

public static void stopsms()
{

/*
some code to stop the activity

*/

}

SMSReceiver.java

最后调用这个函数

MainActivity.stopsms();

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

于 2012-11-02T12:39:43.177 回答
1

然而,在活动中注册第二个接收器的问题在于,它不会像在清单中注册那样持久......因此,虽然这个解决方案可能有效,但只有当活动在后台运行时才会有效。

于 2011-08-07T15:24:46.653 回答
0

很简单,使用这样的界面:

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

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

并在广播接收器中实例化该接口,使用它:

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

并在您的活动中,使其实现您的界面

于 2012-05-07T14:31:09.020 回答