【问题标题】:How to check whether a particular device supports 4G networks in Android?如何在 Android 中检查特定设备是否支持 4G 网络?
【发布时间】:2011-10-25 10:22:51
【问题描述】:

我想检查特定设备是否支持 4G 网络的硬件

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

所有网络 WiFi、2G、3G 4G 等都有 CheckBox 首选项。 现在如果设备不支持 4G 网络,我想隐藏 4G 选择复选框。
剩下的所有功能都完成了。我对如何检测设备是否支持 4G 的问题感到震惊?
请注意,我想检测设备上对 4G 的硬件支持,而不是 4G 连接是否已连接。
非常感谢任何帮助。

【问题讨论】:

  • 你有解决办法吗?

标签: android 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。自己检查一下。

【讨论】:

  • 不起作用,这也为您提供当前活动的网络类型,而不是硬件功能。将“设置”中的首选网络类型更改为 2G 或 3G 会产生不同的结果。
  • 从 google 的文档中,连接管理器的 getAllNetworkInfo 方法在 API 级别 23 中已弃用,建议随后使用 getAllNetworks 和 getNetworkInfo。再一次,getAllNetworks 仅适用于 API 级别 21+
  • @ballzak 你有什么解决办法吗?
【解决方案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();
    }
}

请尝试查看 this 以获得更多说明。

【讨论】:

  • 嗨尼克,感谢您的回复。但我认为这不能解决我的问题。我想检测设备中是否存在 4G 硬件。即设备是否具有 4G 功能?我不想知道是否连接了 4G 连接。这部分我已经完成了。
【解决方案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;
    }

在所有 3 种情况下检查 isNetAvailable 的值都是正确的,这对我有用,希望对你也有用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多