本文主要是介绍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,确认下面代码中红色方框中内容:
这篇关于android dbm模式判断,Android 【信号格的客制化】Part 三:手机上显示的信号强度dbm值不正确...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!