我试图弄清楚当我的应用程序在后台时如何检测wifi状态变化。 总结一下我的问题。 在我的活动中,我注册了一个接收器OnStart():
IntentFilter networkIntent = new IntentFilter();
networkIntent.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkIntent.addAction("android.net.wifi.WIFI_STATE_CHANGED");
registerReceiver(wifichangereceiver, networkIntent);
然后定义我的wifichangereceiver fn:
public final BroadcastReceiver wifichangereceiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifi.isConnected()) {
isConnectedtoWifi = true;
if (MyCallisInConnectedState()) {
onNetworkStateChanged(true);
}
} else {
isConnectedtoWifi = false;
}
}
};
我在Onstop()中注销了它:
unregisterReceiver(wifichangereceiver);
但是,此机制仅在应用程序处于前台时才起作用,因为我正在活动本身中进行注册和注销。当通话也在后台(或可能不在通话中)时,有没有更简单的方法来监视wifi状态?我尝试在清单中添加一个接收器,但不确定这是否正确。我想知道无线状态何时更改。有什么想法吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您的应用定位到API级别26或更高级别,则即使用户未与应用进行交互,您也必须使用前台服务来执行任何长时间运行的任务。自Android Oreo以来,当应用本身不在前台时,系统会对运行后台服务施加限制。为了在后台执行短暂的任务,您的应用应改为使用scheduled job。
您可以参考this培训文档以了解其如何满足您的要求。