Проблемы с TelephonyManager.getNetworkType () и HSDPA :( - PullRequest
0 голосов
/ 02 декабря 2010

Я использовал следующий код, чтобы определить, какую сеть использует устройство:

TelephonyManager tempManager;
tempManager= (TelephonyManager)myContext.getSystemService(Context.TELEPHONY_SERVICE);
int result = 0;
    if(tempManager != null && tempManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS) //do we have a UMTS connection ?
  {
   result = 2;
  }
  else if(tempManager != null && tempManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_GPRS) //or is it just a shabby 2g connection ?
  {
   result = 1;
  }
  else if(tempManager != null && tempManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_UNKNOWN) //or is it just a shabby 2g connection ?
  {
   result = 4;
  }
return result;

Это работает довольно хорошо, если я не подключусь к HSDPA, в этом случае он всегда будет возвращать 0 в результате, что в моем случае заставляет мое программное обеспечение думать, что оно вообще не имеет соединения: (

Любой, кто знает, что происходит, имеет некоторый опыт в этом отношении и, самое главное, имеет какое-то решение этой проблемы ???

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 02 декабря 2010

Существует также перечисление для HSDPA

Чтобы проверить, есть ли соединение, а также получить тип, я бы предпочел getActiveNetworkInfo и isConnected . Возвращает ноль, когда нет соединения. Вы также можете проверить тип соединения с помощью методов getType и getSubtypeName , или вы можете смешать их с вашим подходом.

0 голосов
/ 21 ноября 2012

Это код, который я использую. Он безопасно проверит соединение, а затем вернет тип соединения. Для моего приложения я забочусь только о Wi-Fi, мобильном телефоне или не подключен, поэтому эта функция будет возвращать. Измените свою ситуацию.

//Check weather Internet connection is available or not
public int checkConnectionType()
{
    final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo activeNetInfo = conMgr.getActiveNetworkInfo();
    if (activeNetInfo != null && activeNetInfo.isAvailable() && activeNetInfo.isConnected())
    {
        int type = activeNetInfo.getType();
        if (type == ConnectivityManager.TYPE_MOBILE || type == ConnectivityManager.TYPE_MOBILE_DUN
                || type == ConnectivityManager.TYPE_MOBILE_HIPRI || type == ConnectivityManager.TYPE_MOBILE_MMS
                || type == ConnectivityManager.TYPE_MOBILE_SUPL || type == ConnectivityManager.TYPE_WIMAX)
        {
            return ConnectivityManager.TYPE_MOBILE;
        }
        else if (type == ConnectivityManager.TYPE_WIFI)
        {
            return ConnectivityManager.TYPE_WIFI;
        }
        else
        {
            // Unknown connection type, so to be safe say mobile
            return ConnectivityManager.TYPE_MOBILE;
        }
    }
    else
    {
        // return not connected
        return -1;
    }
}

Вам понадобится это разрешение в манифесте вашего приложения

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
...