Как проверить, поддерживает ли конкретное устройство 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 и выше.