android - NetworkInfo 子类型值

标签 android

如果我通过 Wi-Fi 启动应用程序并切换到 3G,它会打印 0, 15,因此它是移动网络,但我不知道该子类型的含义。然后我切换回 Wi-Fi 并打印 0, 3 一秒钟(移动网络,NETWORK_TYPE_UMTS)并在我的 UI 上显示我已连接到移动网络,最后它连接到 Wi -Fi 并打印 1, 0。那么15是什么意思呢?文档没有说明这些值是什么。

if (networkInfo != null && networkInfo.isConnected()) {
    int netType = networkInfo.getType();
    int netSubtype = networkInfo.getSubtype();

    Log.d("Receiver", String.valueOf(netType));
    Log.d("Receiver", String.valueOf(netSubtype));

    if (netType == ConnectivityManager.TYPE_WIFI) {
        Log.i("Receiver", "WiFi");
    } else if (netType == ConnectivityManager.TYPE_MOBILE
            && netSubtype == TelephonyManager.NETWORK_TYPE_UMTS
            && !telephonyManager.isNetworkRoaming()) {
        Log.i("Receiver", "Mobile");
    }
}

http://developer.android.com/reference/android/net/NetworkInfo.html#getSubtype()

最佳答案

So what does 15 means?

这意味着您通过移动连接的互联网连接速度有多快,所以常量 15 实际上是 HSPA+

HSPA+ (also called Evolved HSPA or 4G) is a further evolution of 
HSPA that offers data speeds of up to 42 Mbps.

你可以去这个post

示例代码:

if(type==ConnectivityManager.TYPE_WIFI){
        return true;
    }else if(type==ConnectivityManager.TYPE_MOBILE){
        switch(subType){
        case TelephonyManager.NETWORK_TYPE_1xRTT:
            return false; // ~ 50-100 kbps
        case TelephonyManager.NETWORK_TYPE_CDMA:
            return false; // ~ 14-64 kbps
        case TelephonyManager.NETWORK_TYPE_EDGE:
            return false; // ~ 50-100 kbps
        case TelephonyManager.NETWORK_TYPE_EVDO_0:
            return true; // ~ 400-1000 kbps
        case TelephonyManager.NETWORK_TYPE_EVDO_A:
            return true; // ~ 600-1400 kbps
        case TelephonyManager.NETWORK_TYPE_GPRS:
            return false; // ~ 100 kbps
        case TelephonyManager.NETWORK_TYPE_HSDPA:
            return true; // ~ 2-14 Mbps
        case TelephonyManager.NETWORK_TYPE_HSPA:
            return true; // ~ 700-1700 kbps
        case TelephonyManager.NETWORK_TYPE_HSUPA:
            return true; // ~ 1-23 Mbps
        case TelephonyManager.NETWORK_TYPE_UMTS:
            return true; // ~ 400-7000 kbps
        /*
         * Above API level 7, make sure to set android:targetSdkVersion 
         * to appropriate level to use these
         */
        case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 
            return true; // ~ 1-2 Mbps
        case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9
            return true; // ~ 5 Mbps
        case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13
            return true; // ~ 10-20 Mbps
        case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8
            return false; // ~25 kbps 
        case TelephonyManager.NETWORK_TYPE_LTE: // API level 11
            return true; // ~ 10+ Mbps
        // Unknown
        case TelephonyManager.NETWORK_TYPE_UNKNOWN:
        default:
            return false;
        }

看看 NETWORK_TYPE_HSPAP 它的连接速度为 10-20 Mbps

关于android - NetworkInfo 子类型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25414830/

相关文章:

android - 如何在 Android 8 中为 FCM 推送消息指定 Android 通知 channel

java - Android OCR 库不支持

android - 这对我的应用程序有意义吗?

android - 如何修复 Firestore 崩溃中的内部错误

带有动态文本的 Android 对话框(API 级别 < 8)在旋转时被杀死

android - RecyclerView 焦点滚动

android - 推送通知时振动

Android Webview 相机上传无法旋转?网页 View 重新加载?安卓 5 和 6+

android - 使用 Facebook 登录按钮请求权限

android - 为什么我会在 Google Play 中收到此优化提示