android - 如何防止收到广播消息

标签 android broadcastreceiver android-service

我有一个有倒数计时器的服务。倒计时计时器结束后,此服务发送广播消息。我使用以下代码发送消息:

Intent intent = new Intent("CancelEvents");
intent.putExtra("message", "cancelled");
LocalBroadcastManager.getInstance(TimerClass.this).sendBroadcast(intent);

我有另一个有广播接收器的 Activity 。这是我用来接收广播消息的代码:

@Override
protected void onCreate(Bundle savedInstanceState)
{
     LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(cancelReceiver,
            new IntentFilter("CancelEvents"));
}

private BroadcastReceiver cancelReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        String message = intent.getStringExtra("message");

        if (message.equals("cancelled"))
        {
            Toast.makeText(this,
                    "Your Ride Got Cancelled", Toast.LENGTH_LONG).show();
        }
    }
};

接收工作正常,但问题是消息也被没有接收者的所有其他 Activity 接收。如何阻止这种情况?

最佳答案

将广播订阅代码移至生命周期的不同部分。

@Override
protected void onStart()
{
    super.onStart();
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(cancelReceiver,
                    new IntentFilter("CancelEvents"));
        }

@Override
    public void onStop() {
        super.onStop();
        LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(cancelReceiver);
    }

说明:您的 Activity 在后台运行,但它仍处于订阅状态,并且正在显示 Toast 消息,而不是其他 Activity。

关于android - 如何防止收到广播消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45632745/

相关文章:

android - getLastKnownLocation 在 Android 中返回 null

android - GCM 在 Android 4 以下收不到消息

android - 使用 espresso 测试软键盘是否可见

android - CardView 背景颜色总是白色

java - 查找设备型号和品牌

java - 更改 BroadcastReceiver 中的变量

Android BroadcastReceiver 还是简单的回调方法?

java - 如何向服务请求许可

android 广播接收器(收到调用和短信)在 android nougat 中无法工作

android - 选择哪一个 : Android Service or Intent Service or Async Task to Sync Files