У меня есть приложение, которое должно работать в автономном и онлайн-режиме. Приложение должно делать запросы к серверу приложений на основе скорости интернет-соединения текущего сетевого подключения (Wifi или Data).
Если Wi-Fi подключен, я могу получить уровень сигнала Wi-Fi текущего соединения, используя этот код.
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), 5);
ИЛИ ЖЕ
wifiInfo.getLinkSpeed();
Если мобильный интернет подключен, я смог получить силу голоса с помощью класса слушателя
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
int obj = signalStrength.getGsmSignalStrength();
int dBm = (2 * obj) -113;
}
Приведенные выше коды получают уровень сигнала, а не скорость. Итак, как мне узнать текущую скорость подключенной сети?
Обычно приложения для проверки скорости, обнаруженные в магазинах или на веб-сайтах, проверяют скорость, отправляя или загружая определенный файл или проверяя связь с удаленным сервером, а затем вычисляя скорость, используя истекшее время.
Эта функция загрузки/выгрузки или проверки связи не поддерживается сервером приложений, с которым я общаюсь, поэтому я не могу использовать это.
Итак, есть ли альтернативный способ проверить скорость текущего интернет-соединения, который можно сделать в режиме реального времени?
Любые выводы могут быть полезны.
PS: эта ссылка имеет код для проверки типа подключения текущей сети. Но есть случаи, когда у меня есть сигнал LTE с полной силой, но нет/очень медленное интернет-соединение. Так что это тоже не будет точным решением для меня.