我可以通过回调轻松获取Android中的sigalStrength
onSignalStrengthsChanged(SignalStrength signalStrength)
并通过传递的对象检索signalStrength
int signal_strength = signalStrength.getGsmSignalStrength();
根据文档,该值在0到39.99之间变化
现在,我想在我的应用程序中将其显示在一个指示器中,该指示器会随着signalStrenght的变化而更新--这与你在手机的状态栏中看到的完全相同。
所以我的问题是--我如何使用这个变量呢?如果它是线性的,那么使用1- 10,11 - 20等区间是很容易的,但我猜这并不容易?
我知道我可以通过调用来标准化这个值。
int level = signalStrength.getLevel()
这是通过调用getLevel,然后我得到一个介于0- 4之间的值,就像RSSI对WIFI所做的那样。但问题是,它需要API23,这意味着我只能覆盖大约40%的android市场。
所以-如果我不想使用getLevel,我怎么能相应地使用getGsmSignalStrength()呢?
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
int signal_strength = signalStrength.getGsmSignalStrength();
//int level = signalStrength.getLevel(); //api 23
Toast.makeText(context, "signalStrength: " + signal_strength, Toast.LENGTH_SHORT).show();
}
发布于 2018-03-06 22:29:37
在你的onSignalStrengthsChanged
中尝试下面的代码片段。我是使用反射实现的。它适用于所有类型的网络类。希望能有所帮助。
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
int level = 0;
try {
final Method m = SignalStrength.class.getDeclaredMethod("getLevel", (Class[]) null);
m.setAccessible(true);
level = (Integer) m.invoke(signalStrength, (Object[]) null);
} catch (Exception e) {
e.printStackTrace();
}
}
https://stackoverflow.com/questions/48711159
复制相似问题