![](/img/trans.png)
[英]How to active Broadcast Receiver only when APP is in background in android?
[英]broadcast receiver not active when app in background
我有一个通过清单文件注册的广播接收器。 基本上,当互联网连接开启/关闭时,它会激活。 它会在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();
}
您可以创建一个Activity,例如BaseActivity (扩展Activity ofcourse)。 在此Activity的onResume()和onPause()方法中,您可以设置一个布尔变量,就像Anup Cowkur在他的答案中所做的那样。
现在,您可以从BaseActivity而不是Activity类扩展所有活动 。 因此,在BroadcastReceiver的 onReceive()函数中,您可以先检查此布尔变量,并仅在Toast为“true”时显示Toast。
这些链接非常有用:
在您的活动中,在onPause()上取消注册您的接收器,并在onResume()上再次注册它
@Override
protected void onPause() {
mLocalBroadcastManager.unregisterReceiver(mReceiver);
super.onPause();
}
@Override
protected void onResume() {
mLocalBroadcastManager.registerReceiver(mReceiver, filter);
super.onResume();
}
我只是使用LocalBroadcastManager进行演示,将其更改为适合您的接收器的那个。
使用布尔标志来指示app是否在后台:
boolean appIsInBackgorund = false;
@Override
protected void onPause() {
appIsInBackgorund = true;
super.onPause();
}
@Override
protected void onResume() {
appIsInBackgorund = false;
super.onResume();
}
现在,您可以检查此标志以确定应用程序是否处于后台状态,并确定是否显示您的祝酒词。
如果您需要在多个活动中使用相同的标志,则可以将其存储在SharedPreferences中 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.