在所有设备上获得信号强度的可靠方法?

时间:2017-01-26 13:20:04

标签: android

SignalStrength value retrieval through 2 different methods

上图显示了LTE连接上的ASU%,橙色线来自TelephonyManager.getAllCellInfo()的值,蓝线是来自回调函数onSignalStrengthsChanged的值。从图表中可以看出,蓝线表示SignalStrengths对象的值不会像预期的那样与getAllCellInfo一致。

这意味着无法依赖onSignalStrengthsChanged来获得可靠的信号值,其中getAllCellInfo似乎具有准确的测量值。但是,问题是getAllCellInfo并不适用于所有设备,华为P9将返回null值。有没有更好的方法在所有设备上获得可靠信号强度值?

除此之外,为什么我已经使用不同的值回应了2种方法?

1 个答案:

答案 0 :(得分:0)

private int getSignalStrengthByName(SignalStrength signalStrength, String methodName) {
  try {
    Class classFromName = Class.forName(SignalStrength.class.getName());
    java.lang.reflect.Method method = classFromName.getDeclaredMethod(methodName);
    Object object = method.invoke(signalStrength);
    return (int) object;
    ....

我能够检索一些华为的信息,而不用使用getAllCellInfo()方法。我这样调用该方法:

getSignalStrengthByName(signalStrength, "getDbm");
getSignalStrengthByName(signalStrength, "getLteRsrp") //examples