【发布时间】:2010-11-09 10:00:49
【问题描述】:
我有一个简单的 Main Activity,它必须停止直到收到 SMS...如何在 BroadcastReceiver 的 onReceive() 方法中从 MainActivity 启动方法?
有没有信号和等待?我可以通过待处理的Intent 传递一些东西,或者我该如何实现这种通信?
【问题讨论】:
标签: android android-activity sdk broadcast
我有一个简单的 Main Activity,它必须停止直到收到 SMS...如何在 BroadcastReceiver 的 onReceive() 方法中从 MainActivity 启动方法?
有没有信号和等待?我可以通过待处理的Intent 传递一些东西,或者我该如何实现这种通信?
【问题讨论】:
标签: android android-activity sdk broadcast
从 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);
我希望这会有所帮助?
【讨论】:
context.sendBroadcast(i); 它必须使用 BroadcastReceiver 上下文来传播意图。
我遇到了完全相同的问题,我尝试使用意图但我没有成功
使用它最简单的方法是使用静态方法和静态变量
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);
}
在你的活动中,让它实现你的界面
【讨论】: