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

相关文章

利用c++判断水仙花数并输出示例代码

《利用c++判断水仙花数并输出示例代码》水仙花数是指一个三位数,其各位数字的立方和恰好等于该数本身,:本文主要介绍利用c++判断水仙花数并输出的相关资料,文中通过代码介绍的非常详细,需要的朋友可以... 以下是使用C++实现的相同逻辑代码:#include <IOStream>#include <vec

Prometheus+cpolar如何在手机上也能监控服务器状态?

《Prometheus+cpolar如何在手机上也能监控服务器状态?》本文强调了通过Cpolar这一内网穿透工具,轻松突破Prometheus仅限于局域网访问的限制,实现外网随时随地访问监控数据,教你... 目录前言1.安装prometheus2.安装cpolar实现随时随地开发3.配置公网地址4.保留固定

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

C++中的解释器模式实例详解

《C++中的解释器模式实例详解》这篇文章总结了C++标准库中的算法分类,还介绍了sort和stable_sort的区别,以及remove和erase的结合使用,结合实例代码给大家介绍的非常详细,感兴趣... 目录1、非修改序列算法1.1 find 和 find_if1.2 count 和 count_if1

Redis中群集三种模式的实现

《Redis中群集三种模式的实现》Redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1. Redis三种模式概述2、Redis 主从复制2.1 主从复制的作用2.2 主从复制流程2

深入理解MySQL流模式

《深入理解MySQL流模式》MySQL的Binlog流模式是一种实时读取二进制日志的技术,允许下游系统几乎无延迟地获取数据库变更事件,适用于需要极低延迟复制的场景,感兴趣的可以了解一下... 目录核心概念一句话总结1. 背景知识:什么是 Binlog?2. 传统方式 vs. 流模式传统文件方式 (非流式)流

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法