3

我有一个通过清单文件注册的广播接收器。基本上,它会在互联网连接打开/关闭时激活。它在启动和关闭时显示 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();


        }
4

3 回答 3

3

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

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

这些链接很有帮助:

检查Android应用程序是否在后台运行

为什么即使应用程序处于后台,BroadcastReceiver 也能正常工作?

于 2012-11-21T05:33:02.683 回答
1

在您的活动中,在 onPause() 中取消注册您的接收器,然后在 onResume() 中再次注册它

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

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

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

于 2012-11-21T03:54:53.297 回答
1

使用布尔标志来指示应用程序是否在后台:

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

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

现在,您可以检查此标志以确定应用程序是否处于后台状态并确定是否显示您的 toast。

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

于 2012-11-21T05:23:58.707 回答