应用在后台时广播接收器未激活。

3
我已经通过清单文件注册了一个广播接收器,基本上它会在网络连接开/关时激活。当它开启和关闭时,它会显示Toast提示信息。
然而,我不希望当我的应用程序处于后台(按下Home键)时显示这个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();


        }

请上传您的带有问题的代码。 - Lucifer
虽然不确定是否有帮助,但已添加。 - Snake
3个回答

3
你可以创建一个活动,例如 BaseActivity(它扩展了 Activity)。在此活动的 onResume() 和 onPause() 方法中,你可以设置一个布尔变量,就像 Anup Cowkur 在他的答案中所做的那样。
现在,你可以将所有的活动从 BaseActivity 扩展而不是 Activity 类。因此,在你的 BroadcastReceiver 的 onReceive() 函数中,你可以首先检查这个布尔变量,并且只有在它为 "true" 时才显示 Toast。
这些链接非常有帮助: 检查 Android 应用是否在后台运行 为什么 BroadcastReceiver 即使在应用程序在后台运行时也能工作?

感谢您提供详细的操作步骤。 - Snake

1
在你的活动中,在onPause()方法中取消注册你的接收器,然后在onResume()方法中重新注册它。
@Override
protected void onPause() {
    mLocalBroadcastManager.unregisterReceiver(mReceiver);
    super.onPause();
}

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

我只是在演示中使用LocalBroadcastManager,您可以根据您的接收器更改它。


问题是我有超过15个活动和片段等。有没有办法确定我的应用程序在后台,这样我就不会显示Toast? - Snake
@Snake 声明一个布尔变量来确定状态,boolean isVisible = false,并在 onPause() 中将其设置为 true。您可以创建一个包含此函数的活动,并使所有活动都扩展此类。 - Lawrence Choy

1
使用布尔标志来指示应用程序是否在后台运行:
boolean appIsInBackgorund = false;
  @Override
    protected void onPause() {
        appIsInBackgorund = true;
        super.onPause();
    }

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接