我有一个服务,它运行在不在后台的主线程上。在服务中我通过broadcastreciver检查网络连接。当我在“设置”中启用限制数据启用时,broadcastreciver会很好地捕获意图,但是我的应用程序禁用了互联网连接(移动数据),尽管它已经在我的设备上。我见过this question和android docs。
intentFilter.addAction("android.net.conn.ACTION_BACKGROUND_DATA_SETTING_CHANGED");
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(this.connectionStatusReceiver, intentFilter);
private BroadcastReceiver connectionStatusReceiver = new BroadcastReceiver() {
@Override
public synchronized void onReceive(Context context, Intent intent) {
log.info("connection state changed");
checkConnectionState();
}
};
getActiveNetworkInfo() - *will always display CONNECTED when i switch on *restriction**
还有一件事,当我打开后台数据限制时,我检查了intent.getAction
。它总是返回android.net.conn.CONNECTIVITY_CHANGE
。
如何检查开启/关闭背景限制数据?
答案 0 :(得分:1)
您可以在Android 7.0(API 24)及更高版本中查看。谷歌在他们的Android开发者网站上添加了howto。这是链接Optimizing Network Data Usage
答案 1 :(得分:-1)
1.使用以下代码检查wifi或移动数据是否已打开。
public boolean isConnectingToInternet()
{
ConnectivityManager connectivity =
(ConnectivityManager) getApplicationContext().getSystemService(
Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
return false;
}
然后根据真或假,检查限制数据:
if(isConnectingToInternet())
{
/*
your code to check network state*/
}