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