Как проверить, поддерживает ли конкретное устройство 4G-сети в Android?

Я хочу проверить, поддерживает ли конкретное устройство аппаратную поддержку сетей 4G.

Я расскажу о проблеме...
В приложении у нас есть страница настроек, где пользователь может сделать выбор и разрешить запуск приложения только в выбранных сетях. Например. Пользователь может выбрать, что приложение будет работать только в сети WiFi или только в сети 3G и т.д.

Существуют настройки CheckBox для всех сетей WiFi, 2G, 3G 4G и т.д. Теперь, если устройство не поддерживает сеть 4G, я хочу скрыть флажок выбора 4G.
Все остальные функции завершены. Я поражен только этой проблемой, как определить, поддерживает ли устройство 4G или нет?
Обратите внимание, что я хочу обнаружить аппаратную поддержку 4G на устройстве, а НЕ подключено соединение 4G.
Любая помощь приветствуется.

Ответ 1

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
   NetworkInfo[] info = cm.getAllNetworkInfo();
   for(int i=0; i <info.length; i++){
       Log.i("netinfo"+i, info[i].getType()+"");
       Log.i("netinfo"+i, info[i].getTypeName());
       Log.i("netinfo"+i, info[i].getSubtype()+"");
       Log.i("netinfo"+i, info[i].getSubtypeName());
   }

Используйте этот кусок кода и получите все доступные параметры на устройстве. Я думаю, что вы сможете получить все возможности устройства.

и информация о типе сети присутствует в http://developer.android.com/reference/android/telephony/TelephonyManager.html.

Я думаю, что типы сетей, добавленные с уровня API 11, для 4g. Проверьте это самостоятельно.

Ответ 2

Это может сработать. Он должен проверить WiMax 4g:

    private boolean is4gavailable() {
    ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mobileInfo = connec.getNetworkInfo(0);
    NetworkInfo wifiInfo = connec.getNetworkInfo(1);
    NetworkInfo wimaxInfo = connec.getNetworkInfo(6);


    if (wimaxInfo!=null) {
    return mobileInfo.isConnectedOrConnecting() || wifiInfo.isConnectedOrConnecting() || wimaxInfo.isConnectedOrConnecting();
    }
    else {
    return mobileInfo.isConnectedOrConnecting() || wifiInfo.isConnectedOrConnecting();
    }
}

Попробуйте найти этот для получения более подробных разъяснений.

Ответ 3

  Context context = MainActivity.this;
  public synchronized static boolean isNetAvailable(Context context){

        boolean isNetAvailable=false;

        if ( context != null ){
            ConnectivityManager mgr = (ConnectivityManager) 
  context.getSystemService(Context.CONNECTIVITY_SERVICE);
            if ( mgr != null )
               {
                boolean mobileNetwork = false;
                boolean wifiNetwork = false;
                boolean wiMaxNetwork = false;
                boolean mobileNetworkConnecetd = false;
                boolean wifiNetworkConnecetd = false;
                boolean wiMaxNetworkConnected = false;
                NetworkInfo mobileInfo = mgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
                NetworkInfo wifiInfo = mgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
                NetworkInfo wiMaxInfo = mgr.getNetworkInfo(ConnectivityManager.TYPE_WIMAX);
                if ( mobileInfo != null )
                    mobileNetwork = mobileInfo.isAvailable();                       
                if ( wifiInfo != null )
                    wifiNetwork = wifiInfo.isAvailable();

                if(wiMaxInfo != null)
                    wiMaxNetwork = wiMaxInfo.isAvailable();

                if(wifiNetwork == true || mobileNetwork == true || wiMaxNetwork == true){
                    mobileNetworkConnecetd = mobileInfo.isConnectedOrConnecting();
                    wifiNetworkConnecetd = wifiInfo.isConnectedOrConnecting();
                    wiMaxNetworkConnected = wiMaxInfo.isConnectedOrConnecting();
                }
                isNetAvailable = ( mobileNetworkConnecetd || wifiNetworkConnecetd || wiMaxNetworkConnected );
            }
        }
        return isNetAvailable;
    }

Проверка на значение isNetAvailable верно во всех 3 случаях, это работает для меня, желаю работать для вас тоже

Примечание. Доступность 4G будет включать API уровня 8 и выше.