【发布时间】:2012-02-27 10:26:10
【问题描述】:
我正在制作一个应用程序,我想在单击按钮时广播变量值。 同时我想在其他活动中接收这个值并显示它。 我应该怎么做?
【问题讨论】:
标签: android broadcastreceiver broadcast
我正在制作一个应用程序,我想在单击按钮时广播变量值。 同时我想在其他活动中接收这个值并显示它。 我应该怎么做?
【问题讨论】:
标签: android broadcastreceiver broadcast
在我看来,您可以使用全局变量,它可以跨活动使用。(还回答了一些未提出的问题;))
同样,你可以扩展android.app.Application类,
那些需要维护全局应用程序状态的基类。您可以通过在 AndroidManifest.xml 的标记中指定其名称来提供自己的实现,这将导致在创建应用程序/包的进程时为您实例化该类。
来自Another question的示例,
public class MyApplication extends Application {
private String someVariable;
public String getSomeVariable() {
return someVariable;
}
public void setSomeVariable(String someVariable) {
this.someVariable = someVariable;
}
}
然后在您的活动中,您可以像这样获取和设置变量:
// set
((MyApplication) this.getApplication()).setSomeVariable("foo");
// get
String s = ((MyApplication) this.getApplication()).getSomeVariable();
如示例中所示,设置您的变量来自一个活动(或按钮单击任何内容)并获取另一个活动中的值。
【讨论】:
您的应用程序是否需要广播变量?如果您只是想将变量从当前活动传递到新活动,请通过调用 startActivityForResult 从当前活动启动新活动并将变量作为参数传递。
如果您不希望新活动将结果发送回当前活动,请使用 startActivity
【讨论】:
我认为使用intent.putExtra("PARAM", parameter); 传递它并使用getExtras() 阅读它更容易并且适合他需要做的事情!
【讨论】:
选项 1: 在发送活动中创建自定义意图(例如:CurrentActivity):
public static final String RESTART_CHAT_POLLING_INTENT = "com.cleeqa.android.chat.restart.intent";
广播:
Intent i = new Intent();
i.setAction(RESTART_CHAT_POLLING_INTENT );
mContext.sendBroadcast(i);
在你想接收的activity(NewActivity)中注册一个broadcastReceiver:
BroadcastReceiver myReceiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(CurrentActivity.RESTART_CHAT_POLLING_INTENT);
registerReceiver(myReceiver, filter);
接收广播(也在NewActivity中):
private class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(CurrentActivity.RESTART_CHAT_POLLING_INTENT)) {
//DO WHAT YOU WANT
}
}
选项 2(不需要广播接收器): 点击:
Intent intent = new Intent(CurrentActivity.this, NewActivity.class);
intent.putExtra("PARAM", parameter);
startActivity(intent);
你要接收的活动的onCreate/onStart(NewActivity):
Bundle extras = getIntent().getExtras();
if (extras != null) {
parameter = extras.getString("PARAM");
}
【讨论】: