android dbm模式判断,Android 【信号格的客制化】Part 三:手机上显示的信号强度dbm值不正确...

本文主要是介绍android dbm模式判断,Android 【信号格的客制化】Part 三:手机上显示的信号强度dbm值不正确...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android 【信号格的客制化】Part 3:手机上显示的信号强度dbm值不正确

前言         欢迎大家我分享和推荐好用的代码段~~声明         欢迎转载,但请保留文章原始出处:

CSDN:http://www.csdn.net

雨季o莫忧离:http://blog.csdn.net/luckkof

正文

若做信号验证测试时,从仪器上读取到的信号强度与在手机设置中上读取到的信号强度差异较大,尤其3G网络情况下特别明显。请参考以下说明做修改后再进行测试。

另外需要说明的是,由于测量误差以及计算误差,仪器上的读数与手机上的读数相差±3dbm应该属于正常范围。另外,测试时对于仪器信号变化的频率不宜过快,因为底层的变化需要一定时间才能更新到UI上。

[SOLUTION]

手机上目前可能有两个地方可以看见信号强度dbm值:

Ø设置——SIM卡管理——SIM卡信息——状态信息——信号强度

Ø设置——关于手机——状态信息——SIM卡状态——信号强度

由于UI上得到信号强度dbm值调用的接口,可能使用了2G信号公式从asu值推算得到dbm值,因此在3G网络下调用此接口会有一些问题出现。请根据版本情况对照修改:

Android 4.0

修改SignalStrength.java

public int getGsmDbm() {

int dBm;

int gsmSignalStrength = getGsmSignalStrength();

int asu = (gsmSignalStrength == 99 ? -1 : gsmSignalStrength);

if (asu != -1) {

//mtk add

//if(IS_CMCC && mGsmRscpQdbm < 0)

if(mGsmRscpQdbm < 0)

//mtk add end

{

// Return raw value for TDD 3G network.

dBm = mGsmRscpQdbm / 4;

} else {

dBm = -113 + (2 * asu);

}

} else {

dBm = -1;

}

if (DBG) log("getGsmDbm=" + dBm);

return dBm;

}

private void setFromNotifierBundle(Bundle m) {

//MTK-START [mtk04070][111116][ALPS00093395]Support Gemini

mSimId = m.getInt("simId");

//MTK-END [mtk04070][111116][ALPS00093395]Support Gemini

mGsmSignalStrength = m.getInt("GsmSignalStrength");

mGsmBitErrorRate = m.getInt("GsmBitErrorRate");

mCdmaDbm = m.getInt("CdmaDbm");

mCdmaEcio = m.getInt("CdmaEcio");

mEvdoDbm = m.getInt("EvdoDbm");

mEvdoEcio = m.getInt("EvdoEcio");

mEvdoSnr = m.getInt("EvdoSnr");

mLteSignalStrength = m.getInt("LteSignalStrength");

mLteRsrp = m.getInt("LteRsrp");

mLteRsrq = m.getInt("LteRsrq");

mLteRssnr = m.getInt("LteRssnr");

mLteCqi = m.getInt("LteCqi");

isGsm = m.getBoolean("isGsm");

mGsmRscpQdbm = m.getInt("RscpQdbm"); //mtk add

}

public void fillInNotifierBundle(Bundle m) {

//MTK-START [mtk04070][111116][ALPS00093395]Support Gemini

m.putInt("simId", mSimId);

//MTK-END [mtk04070][111116][ALPS00093395]Support Gemini

m.putInt("GsmSignalStrength", mGsmSignalStrength);

m.putInt("GsmBitErrorRate", mGsmBitErrorRate);

m.putInt("CdmaDbm", mCdmaDbm);

m.putInt("CdmaEcio", mCdmaEcio);

m.putInt("EvdoDbm", mEvdoDbm);

m.putInt("EvdoEcio", mEvdoEcio);

m.putInt("EvdoSnr", mEvdoSnr);

m.putInt("LteSignalStrength", mLteSignalStrength);

m.putInt("LteRsrp", mLteRsrp);

m.putInt("LteRsrq", mLteRsrq);

m.putInt("LteRssnr", mLteRssnr);

m.putInt("LteCqi", mLteCqi);

m.putBoolean("isGsm", Boolean.valueOf(isGsm));

m.putInt("RscpQdbm", mGsmRscpQdbm);//mtk add    }

Android 4.1/4.2

步骤1:请修改ServiceStateExtXXX.java:

public int mapGsmSignalDbm(int GsmRscpQdbm,int asu){

int dBm;

//mtk add

if(mGsmRscpQdbm < 0 && mGsmRscpQdbm ! = -1)

dBm = GsmRscpQdbm / 4; // Return raw value for 3G network.

else

//mtk add end

dBm = -113 + (2 * asu);

return dBm;

}

步骤2:请修改SingalStrength.java,确认下面代码中红色方框中内容:

101412747.bmp

101412748.bmp

101412749.bmp

101412750.bmp

这篇关于android dbm模式判断,Android 【信号格的客制化】Part 三:手机上显示的信号强度dbm值不正确...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/166985

相关文章

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化