我的活动未收到其他活动发送的本地广播

时间:2016-11-13 15:42:54

标签: android localbroadcastmanager

我正熟悉本地广播消息。我有2个活动。

MainActivity:

我有2个按钮。点击1按钮,我播放消息。点击另一个,我导航到第二个活动。

public class MainActivity extends AppCompatActivity {

Button btn;
    Button btn1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button)findViewById(R.id.sendBroadCast);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                    sendMessage();
            }
        });
        btn1 = (Button)findViewById(R.id.btn);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });

    }
    void sendMessage(){
        Log.d("RAK","Gonna send braodcast");
        Intent intent = new Intent("customMsg");
        intent.putExtra("message", "This is my message!");
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    }
}

第二项活动:

在此活动的onCreate中注册接收者。

public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Log.d("RAK","In oncreate of second activity.Registered for local receiver");
        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
                new IntentFilter("customMsg"));

    }
    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Get extra data included in the Intent
            String message = intent.getStringExtra("message");
            Log.d("receiver", "Got message: " + message);
        }
    };

    @Override
    protected void onDestroy() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
        super.onDestroy();
    }
}

我面临的问题是,第二个活动没有收到广播。请帮帮我。

P.S:请不要将此标记为副本。我已关注此链接:how to use LocalBroadcastManager?

谢谢, 勒凯什

2 个答案:

答案 0 :(得分:2)

为了接收广播,当第一个活动正在发送广播时,第二个活动应该启动并运行,这在您的情况下会很难(2个活动不同时运行)。
你的第一个活动发送了广播,但是没有活动(在你的情况下是第二个活动)已经启动,因此乱七八糟的“丢失”。
例如,您可以通过在服务中进行广播来测试,并且您的第二个活动正在运行。然后,活动可以处理/接收它。

您可能想要做的是使用extraData将String传递给secondActivity。如果你想测试BroadcastReceiver,那么试试发送广播的服务吧!

答案 1 :(得分:0)

问题是您在第二个活动的onCreate()中注册了广播接收器,这意味着第二个活动应该在您广播您的意图之前已经启动,请记住,当第二个活动被销毁时您不会取消注册它。

备选方案,您可以在清单文件中静态注册您的接收器

public class Receiver extends BroadcastReceiver{
  public void onReceive(Context context, Intent intent) {
    // Whatever
  }
}

清单

<receiver
  android:name=".Receiver"
  android:exported="false" >
  <intent-filter>
    <action android:name="customMsg" />             
  </intent-filter>
</receiver>

注意:

静态注册以确保接收器在系统引导时或在运行时添加应用程序时注册