博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
智能手机中显示信号强度格数
阅读量:6091 次
发布时间:2019-06-20

本文共 2170 字,大约阅读时间需要 7 分钟。

在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;    }

 

 

转载地址:http://sdlwa.baihongyu.com/

你可能感兴趣的文章
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>
前端面试中的常见的算法问题
查看>>
计算机语言的基本理论
查看>>
nodejs流之行读取器例子
查看>>
批量文件重命名工具
查看>>
简单说一下UWP中的JumpList
查看>>
unity将object[]或者string对象转换成枚举enum
查看>>
以太坊系列之六: p2p模块--以太坊源码学习
查看>>
使用scikit-learn解决文本多分类问题(附python演练)
查看>>
2018 年最值得关注的 JavaScript 趋势
查看>>
什么是区块链?超级账本 Brian Behlendorf 从五个方面教你认识
查看>>
Linux中的帮助功能
查看>>
针对Android的Pegasus恶意软件版本和针对iOS的有什么不同?
查看>>
全局探色器
查看>>
Hive Export和Import介绍及操作示例
查看>>
http://mongoexplorer.com/ 一个不错的 mongodb 客户端工具。。。
查看>>
上传jar包到nexus私服
查看>>
Why Namespace? - 每天5分钟玩转 OpenStack(102)
查看>>
Project:如何分析项目中的资源分配情况
查看>>