智能手机中显示信号强度格数

在Android4.0的系统中,手机中显示信号强度格数的代码在

frameworks\base\telephony\java\android\telephony\SignalStrength.java

getLevel( )函数,该函数是主要用来获取信号的强度。

 

public int getLevel() {

        int level;



        if (isGsm) {

            level = getLteLevel();

            if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {

                level = getGsmLevel();

            }

        } else {

            int cdmaLevel = getCdmaLevel();

            int evdoLevel = getEvdoLevel();

            if (evdoLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {

                /* We don't know evdo, use cdma */

                level = cdmaLevel;

            } else if (cdmaLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {

                /* We don't know cdma, use evdo */

                level = evdoLevel;

            } else {

                /* We know both, use the lowest level */

                //level = cdmaLevel < evdoLevel ? cdmaLevel : evdoLevel;

                level = cdmaLevel > evdoLevel ? cdmaLevel : evdoLevel;

            }

        }

        if (DBG) log("getLevel=" + level);

        return level;

    }

getCdmaLevel( )获取CdmaLevel,同样也有getEvdoLevel( )函数,在上一个函数中,通过比较Evdo和Cdma的强度,来最终确定信号的显示强度,也就是我们在通知栏里看到的信号格数。

public int getCdmaLevel() {

        final int cdmaDbm = getCdmaDbm();

        final int cdmaEcio = getCdmaEcio();

        int levelDbm;

        int levelEcio;



        if (cdmaDbm >= -75) levelDbm = SIGNAL_STRENGTH_GREAT;

        else if (cdmaDbm >= -85) levelDbm = SIGNAL_STRENGTH_GOOD;

        else if (cdmaDbm >= -95) levelDbm = SIGNAL_STRENGTH_MODERATE;

        else if (cdmaDbm >= -100) levelDbm = SIGNAL_STRENGTH_POOR;

        else levelDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;



        // Ec/Io are in dB*10

        if (cdmaEcio >= -90) levelEcio = SIGNAL_STRENGTH_GREAT;

        else if (cdmaEcio >= -110) levelEcio = SIGNAL_STRENGTH_GOOD;

        else if (cdmaEcio >= -130) levelEcio = SIGNAL_STRENGTH_MODERATE;

        else if (cdmaEcio >= -150) levelEcio = SIGNAL_STRENGTH_POOR;

        else levelEcio = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;



        int level = (levelDbm < levelEcio) ? levelDbm : levelEcio;

        if (DBG) log("getCdmaLevel=" + level + ",cdmaDbm=" + cdmaDbm + ",cdmaEcio=" +cdmaEcio);

        return level;

    }


 


 

你可能感兴趣的:(手机)