如何在Android中检查特定设备是否支持4G网络?

11

我想检查一个特定的设备是否具有支持4G网络的硬件。

我将详细说明这个问题...
在应用程序中,我们有一个设置页面,用户可以在其中进行选择,并允许应用程序仅在所选网络中运行。 例如,用户可以选择应用程序仅在WiFi网络或仅在3G网络中运行等。

对于所有网络WiFi、2G、3G、4G等,都有复选框首选项。 现在,如果设备没有支持4G网络的功能,我想隐藏4G选择复选框。
所有其余功能都已完成。我只是被这个问题困扰,即如何检测设备是否支持4G?
请注意,我想检测设备上的硬件支持4G,而不是4G连接是否连接等。
非常感谢任何帮助。


你得到了任何解决方案吗? - Narayan soni
3个回答

3
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。请自行检查。

1
不起作用,这也只会给出当前活动的网络类型,而不是硬件能力。在设置中将首选网络类型更改为2G或3G会得到不同的结果。 - ballzak
从谷歌的文档中可以看到,连接管理器的getAllNetworkInfo方法在API 23级别中已经被弃用,建议使用getAllNetworks和getNetworkInfo方法。然而,getAllNetworks仅适用于API 21及以上版本。 - Akah
@ballzak,你有找到任何解决方案吗? - Narayan soni

1

这可能有效。它应该检查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();
    }
}

尝试查看this以获得更多澄清。


嗨Nick, 感谢回复。 但我不认为这解决了我的问题。 我想检测设备中是否有4G硬件。即,设备是否具有4G功能? 我不想知道4G连接是否已连接。这部分我已经完成了。 - Udayan

0
  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;
    }

在所有3种情况下,检查isNetAvailable的值是否为true,这对我有效,希望对您也有效。

注意:从API级别8开始,将引入4G可用性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接