如何防止收到广播消息
How to prevent receiving broadcast message
我有一个有倒数计时器的服务。倒计时计时器结束后,此服务发送广播消息。我使用以下代码发送消息:
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 的 onStop() 回调中定义取消注册您的广播,其中 activity 您已在 onCreate() 中注册 cancelReceiver...
@Override
public void onStop() {
super.onStop();
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(cancelReceiver);
}
将广播订阅代码移至生命周期的不同部分。
@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 消息,而不是其他活动。
我有一个有倒数计时器的服务。倒计时计时器结束后,此服务发送广播消息。我使用以下代码发送消息:
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 的 onStop() 回调中定义取消注册您的广播,其中 activity 您已在 onCreate() 中注册 cancelReceiver...
@Override
public void onStop() {
super.onStop();
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(cancelReceiver);
}
将广播订阅代码移至生命周期的不同部分。
@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 消息,而不是其他活动。