0

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

主要活动 :

我有 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();
    }
}

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

PS:请不要将此标记为重复。我已经关注了这个链接:如何使用 LocalBroadcastManager?

谢谢,拉克什

4

2 回答 2

2

为了接收广播,第二个活动应该启动并运行,而第一个活动正在发送广播,这在您的情况下会很困难(两个活动不会同时运行)。
您的第一个活动发送广播,但尚未启动任何活动(在您的情况下为第二个活动),因此消息“丢失”。
例如,您可以通过从服务内广播进行测试,然后运行您的第二个活动。然后,活动可以处理/接收它。

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

于 2016-11-13T15:53:42.140 回答
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>

笔记:

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

于 2016-11-13T16:14:39.620 回答