Проверьте, включены ли данные фонового ограничения или нет?

У меня есть служба, которая работает в основном потоке, а не в фоновом режиме. В сервисе проверяю сетевое подключение через широковещательный приемник. Когда я включаю включение данных ограничения в настройках, Broadreciver хорошо улавливает намерения, но подключение к Интернету (мобильные данные) отключено для моего приложения, хотя оно есть на моем устройстве. Я видел этот вопрос и документы Android.

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. Как проверить, включены/выключены ли фоновые данные?


person nAkhmedov    schedule 11.03.2015    source источник
comment
как я могу узнать, включил ли пользователь ограничение фоновых данных в настройках моего приложения?   -  person nAkhmedov    schedule 12.03.2015


Ответы (2)


Вы можете проверить это с Android 7.0 (API 24) и выше. Google добавил руководство на свой сайт для разработчиков Android. Вот ссылка Оптимизация использования сетевых данных

person Phil    schedule 08.11.2017

1. Используйте следующий код, чтобы проверить, включен ли Wi-Fi или мобильные данные.

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*/
    
    }
    
person ravi ranjan    schedule 08.10.2015