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,确认下面代码中红色方框中内容:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值