检查是否启用了背景限制数据?

时间:2015-03-11 12:16:26

标签: android broadcastreceiver restriction

我有一个服务,它运行在不在后台的主线程上。在服务中我通过broadcastreciver检查网络连接。当我在“设置”中启用限制数据启用时,broadcastreciver会很好地捕获意图,但是我的应用程序禁用了互联网连接(移动数据),尽管它已经在我的设备上。我见过this questionandroid 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。 如何检查开启/关闭背景限制数据?

2 个答案:

答案 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;
    }
  1. 然后根据真或假,检查限制数据:

    if(isConnectingToInternet())
    {
    
          /*
          your code to check network state*/
    
    }