我想知道是否有人知道如何以编程方式获得Android手机中的LTE / WCDMA信号的SNR或信噪比。 SNR可以从三星机型的密码*#0011#中查看,但在Nexus 5等其他手机中无法查看。我在想是否有实际的API,可能是现有API的计算?
我知道您可以使用SignalStrength API获取有关信号的详细信息,但我已经解析了我看到的部分,但似乎无法找到任何SNR读数。
非常感谢任何帮助或建议!
谢谢!
其他信息:
我应该补充一点,我已经从这个帖子[链接] How to get LTE signal strength in Android?修补了信号强度,所以这是我的问题的起点。
我的结果如下:
LteSignalStrength - >根据位置在15-30之间波动,不知道这是什么..
LteRsrp - >显示dBm,我想这就是手机如何确定信号质量(大致无论如何)。
LteRsrq - >显示-7到-11,不确定
LteRssnr - >因某种原因总是300,不明白为什么......
LteCqi - >渠道质量指标?一些巨大的数字,似乎是最大的32位整数值,不确定
有没有办法从这个API获得SNR,或者我在大海捞针中寻找一个不存在的针?
三星GalaxyNote2的屏幕截图,SNR读数来自*#0011#密码:
答案 0 :(得分:10)
我从2014年8月开始密集研究这个问题。 首先,我希望您熟悉一些电信知识和Android开源项目(AOSP)。那么,根据我的研究,我说:
基于以上所述,我认为:
我希望它能给你带来一些启示。如果您有任何其他信息,请在此处分享。
答案 1 :(得分:1)
I use the following to get the SNR:
public class PhoneStateListener extends android.telephony.PhoneStateListener
{
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength)
{
double snr = (double) SignalStrength.class.getMethod("getLteRssnr").invoke(signalStrength)/10D;
}
}
You just need to register for signal events:
TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
PhoneStateListener mPhoneStateListener = new PhoneStateListener();
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);