开发者

Android TelephonyManager.getNetworkType() returned constant values in bearer speed order?

开发者 https://www.devze.com 2022-12-22 02:31 出处:网络
TelephonyManager.getNetworkType() returns one of the constant values. It appears that the constant values have an integer order, by possible bearer link speed.

TelephonyManager.getNetworkType() returns one of the constant values.

It appears that the constant values have an integer order, by possible bearer link speed.

I know using constant values used in the following manner is generally bad,

however could one use this to determine a basic cutoff for application functionality and have it work between API levels? (in API-v1 there was nothing above 0x03)

if( telephonyManager.getNetworkType() >开发者_如何学Go; TelephonyManager.NETWORK_TYPE_EDGE )
{
     return "3G! party on!";
}
else if( telephonyManager.getNetworkType() > TelephonyManager.NETWORK_TYPE_UNKNOWN )
{
     return "2G, OK. just don't go nuts!";
}
else 
{
     return "No data sorry"
}


You cannot assume they are in order because they are not. For example, LTE is 13 while HSPAP (HSPA+) is 15. Those are not in order. I wrote a "speed ranking" piece of code, which assignes each network type its own speed rank

public static int getNetTypeSpeedRank(int t) {

    switch (t) {
        case -1:
            t = -1;
        case ContextManager.MDM_NETWORK_TYPE_UNKNOWN:
            t = 0;
            break;
        case ContextManager.MDM_NETWORK_TYPE_IDEN:
            t = 1;
            break;
        case ContextManager.MDM_NETWORK_TYPE_GPRS:
            t = 2;
            break;
        case ContextManager.MDM_NETWORK_TYPE_EDGE:
            t = 3;
            break;
        case ContextManager.MDM_NETWORK_TYPE_UMTS:
            t = 4;
            break;
        case ContextManager.MDM_NETWORK_TYPE_CDMA:
            t = 5;
            break;
        case ContextManager.MDM_NETWORK_TYPE_1xRTT:
            t = 6;
            break;
        case ContextManager.MDM_NETWORK_TYPE_EVDO_0:
            t = 7;
            break;
        case ContextManager.MDM_NETWORK_TYPE_EVDO_A:
            t = 8;
            break;
        case ContextManager.MDM_NETWORK_TYPE_EVDO_B:
            t = 9;
            break;
        case ContextManager.MDM_NETWORK_TYPE_HSDPA:
            t = 10;
            break;
        case ContextManager.MDM_NETWORK_TYPE_HSUPA:
            t = 11;
            break;
        case ContextManager.MDM_NETWORK_TYPE_HSPA:
            t = 12;
            break;
        case ContextManager.MDM_NETWORK_TYPE_HSPAP:
            t = 13;
            break;
        case ContextManager.MDM_NETWORK_TYPE_EHRPD:
            t = 14;
            break;
        case ContextManager.MDM_NETWORK_TYPE_LTE:
            t = 15;
            break;
        default:
            t = 16;
    }

    return t;
}


I really wouldn't count on that behavior.

0

精彩评论

暂无评论...
验证码 换一张
取 消