【问题标题】:How to broadcast variable value and receive it?如何广播变量值并接收它?
【发布时间】:2012-02-27 10:26:10
【问题描述】:

我正在制作一个应用程序,我想在单击按钮时广播变量值。 同时我想在其他活动中接收这个值并显示它。 我应该怎么做?

【问题讨论】:

    标签: android broadcastreceiver broadcast


    【解决方案1】:

    在我看来,您可以使用全局变量,它可以跨活动使用。(还回答了一些未提出的问题;))

    同样,你可以扩展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();
    

    如示例中所示,设置您的变量来自一个活动(或按钮单击任何内容)并获取另一个活动中的值。

    【讨论】:

    • 看不出这比在打开新活动时添加额外内容更好。这会将变量保留在内存中...
    【解决方案2】:

    您的应用程序是否需要广播变量?如果您只是想将变量从当前活动传递到新活动,请通过调用 startActivityForResult 从当前活动启动新活动并将变量作为参数传递。

    如果您不希望新活动将结果发送回当前活动,请使用 startActivity

    【讨论】:

      【解决方案3】:

      我认为使用intent.putExtra("PARAM", parameter); 传递它并使用getExtras() 阅读它更容易并且适合他需要做的事情!

      【讨论】:

        【解决方案4】:

        选项 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");
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-23
          • 1970-01-01
          • 2015-06-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多