上图显示了LTE连接上的ASU%,橙色线来自TelephonyManager.getAllCellInfo()
的值,蓝线是来自回调函数onSignalStrengthsChanged的值。从图表中可以看出,蓝线表示SignalStrengths
对象的值不会像预期的那样与getAllCellInfo
一致。
这意味着无法依赖onSignalStrengthsChanged
来获得可靠的信号值,其中getAllCellInfo
似乎具有准确的测量值。但是,问题是getAllCellInfo
并不适用于所有设备,华为P9将返回null
值。有没有更好的方法在所有设备上获得可靠信号强度值?
除此之外,为什么我已经使用不同的值回应了2种方法?
答案 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