Проверьте скорость полосы пропускания в Android

У нас есть возможность проверить типы сетевых подключений в Android (будь то 3G, Edge или GPRS).

Мне нужно проверить пропускную способность. Мне нужно инициировать звонок. Для этого мне нужно проверить пропускную способность. Только выше определенной полосы пропускания мне нужно сделать видимой опцию для вызова (чтобы инициировать вызов).

Мне нужно найти скорость соединения программно (скорость соединения для Mobile Data Link, EDGE).

Ответ 1

Вы можете загрузить файл известного размера с вашего сервера и рассчитать, сколько времени потребовалось для его загрузки. Тогда у вас есть пропускная способность. Простой, но работает:)

Образец, не проверенный:

//Download your image
long startTime = System.currentTimeMillis();
HttpGet httpRequest = new HttpGet(new URL(urlString).toURI());
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpClient.execute(httpRequest);
long endTime = System.currentTimeMillis();

HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity;
bufHttpEntity = new BufferedHttpEntity(entity);

//You can re-check the size of your file
final long contentLength = bufHttpEntity.getContentLength();

// Log
Log.d(TAG, "[BENCHMARK] Dowload time :"+(endTime-startTime)+" ms");

// Bandwidth : size(KB)/time(s)
float bandwidth = contentLength / ((endTime-startTime) *1000);

Ответ 2

Это вернет текущую скорость связи в LINK_SPEED_UNITS.

но эта работа для WIFI Only

WifiManager wifiManager = Context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
    Integer linkSpeed = wifiInfo.getLinkSpeed(); //measured using WifiInfo.LINK_SPEED_UNITS
}

Ответ 3

Попробуйте класс сетевой библиотеки Facebook (размер библиотеки = 16 КБ)

Мы можем получить вручную/слушатель изменения сети также доступны.

Код ручной загрузки:

ConnectionQuality cq = ConnectionClassManager.getInstance(). GetCurrentBandwidthQuality();

Ссылка на Github - https://github.com/facebook/network-connection-class

Ответ 4

TelephonyManager mTelephonyManager;
MyPhoneStateChangeListener mPhoneStatechangelistener;
int mSignalStrength = 0;

// in oncreate or onResume
mPhoneStatechangelistener = new MyPhoneStateListener();
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStatelistener, 
PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);



public class MyPhoneStateChangeListener extends PhoneStateListener {

int mSignalStrength = 0;
boolean isLTE = false;
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
    super.onSignalStrengthsChanged(signalStrength);

    if (signalStrength.isGsm()) {
        if (signalStrength.getGsmSignalStrength() != 99) {
            mSignalStrength = signalStrength.getGsmSignalStrength() * 2 - 113;
            System.out.println("Signal strength :" + mSignalStrength);
            isLTE = false;
        } else {
            // LTE 4G signal
            isLTE = true;
            Method[] methods = android.telephony.SignalStrength.class.getMethods();
            for (Method mthd : methods) {
                if (mthd.getName().equals("getLteRsrp"))
                {
                    try {
                        mSignalStrength = (int) mthd.invoke(signalStrength);
                        System.out.println("Signal strength :" + mSignalStrength);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    } else {
        mSignalStrength = signalStrength.getCdmaDbm();
    }

    if (isLTE == true && mSignalStrength < -110)
    {
    }
    else if (isLTE == false && mSignalStrength < -100)
    {
    }
}
}