11

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

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

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

4

3 回答 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。自己检查一下。

于 2011-11-01T11:30:43.413 回答
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();
    }
}

尝试查看内容以获得更多说明。

于 2011-10-25T14:04:14.947 回答
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;
    }

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

注意:4G 可用性将在 API 级别 8 之后引入。

于 2012-01-07T04:53:11.190 回答