我想检测用户在一段时间内(例如 5 分钟)处于低接收(低网络信号)的地方的情况,我想知道要依赖什么值。
我现在拥有的是:
public class RadiationTest {
TelephonyManager TelephonManager;
SignalStrengthListener signallistener;
private Context context;
public RadiationTest(Context context) {
this.context = context;
try {
signallistener = new SignalStrengthListener();
TelephonManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
TelephonManager.listen(signallistener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
} catch (Exception ex) {
ex.printStackTrace();
}
}
class SignalStrengthListener extends PhoneStateListener {
@Override
public void onSignalStrengthsChanged(android.telephony.SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
int SignalStrength_ASU = signalStrength.getGsmSignalStrength();
int SignalStrength_dBm = (2 * SignalStrength_ASU) - 113; // -> dBm
// here I can use dbm
// I can also get the bars with signalStrength.getLevel()
}
}
}
查看 dbm 值 - 大部分时间似乎是85 - 这意味着接收良好,而当去接收低的地方时,它会得到负值。从这个答案中,我了解到 dbm 的负值意味着接收率低 - 但它不是负数,它只是意味着您的设备非常敏感。(见答案表)。
此外,dbm 值似乎因设备而异。
查看signalStrength.getLevel()
,它会告诉您那里有多少个接待栏,这看起来是个不错的选择。
考虑到这一点,这SignalStrength
是一个具有很多值的类,我只是想知道在一段时间内测试低信号的最可靠方法是什么,看看人们是否有这方面的经验。