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值不正确...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_30872577/article/details/117760206
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/166985

相关文章

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的