广播接收器在后台应用程序时不活动

时间:2012-11-21 03:45:51

标签: android broadcastreceiver

我有一个通过清单文件注册的广播接收器。基本上,当互联网连接开启/关闭时,它会激活。它会在Toast出现时以及在它关闭时显示Toast。

但是,当我的应用程序在后台(按下主页按钮)时,我不希望显示此Toast。我怎样才能做到这一点?我不介意广播是否仍然已注册,但我需要一种方法来了解我的应用程序是不可见的所以我禁用了Toast。

非常感谢

    ConnectivityManager connManager = (ConnectivityManager)context.getSystemService(context.CONNECTIVITY_SERVICE);
        NetworkInfo active_nwInfo = (NetworkInfo) connManager.getActiveNetworkInfo();

if(active_nwInfo == null || !active_nwInfo.isConnected()) {
            //broadcast.putExtra("action", "no_connection");
            Toast.makeText(context, "No Internet Connection", Toast.LENGTH_LONG).show();


        }else {
            //broadcast.putExtra("action", "new_connection");
            Toast.makeText(context, "Internet Connection", Toast.LENGTH_LONG).show();


        }

3 个答案:

答案 0 :(得分:3)

您可以创建活动,例如 BaseActivity (扩展了Activity ofcourse)。在此活动的 onResume() onPause()方法中,您可以设置一个布尔变量,就像Anup Cowkur在他的回答中所做的那样。 / p>

现在,您可以从BaseActivity扩展所有活动而不是Activity类。因此,在 BroadcastReceiver onReceive()函数中,您可以先检查此布尔变量,并仅在Toast为“true”时显示Toast。

这些链接非常有用:

Checking if an Android application is running in the background

Why BroadcastReceiver works even when app is in background ?

答案 1 :(得分:1)

在你的活动中,在onPause()上注销你的接收者,然后在onResume()再次注册它

@Override
protected void onPause() {
    mLocalBroadcastManager.unregisterReceiver(mReceiver);
    super.onPause();
}

@Override
protected void onResume() {
    mLocalBroadcastManager.registerReceiver(mReceiver, filter);
    super.onResume();
}

我只是使用LocalBroadcastManager进行演示,将其更改为适合您的接收器。

答案 2 :(得分:1)

使用布尔标志指示app是否在后台:

boolean appIsInBackgorund = false;
  @Override
    protected void onPause() {
        appIsInBackgorund = true;
        super.onPause();
    }

    @Override
    protected void onResume() {
        appIsInBackgorund = false;
        super.onResume();
    }

现在,您可以检查此标记以确定应用是否处于后台状态,并确定是否显示您的祝酒词。

如果您需要在多个活动中使用相同的标记,则可以将其存储在SharedPreferences中。