我想检测用户在某个地方接收低(网络信号低)一段时间(例如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 - 这意味着良好的接收效果,当到达接收率低的地方时,它会获得负值。从this回答我得知dbm的负值意味着接收很低 - 但它不是负面的,它只是意味着你的设备非常敏感。 (见答案中的表格)。
此外,dbm值似乎在不同设备之间发生变化。
查看signalStrength.getLevel()
,它会显示有多少接收条,这看起来是个不错的选择。
考虑到这一点,SignalStrength
是一个有很多价值观的课程,我只是想知道为某些人测试低信号的最可靠方法是什么时间量,看看人们是否有这方面的经验。
答案 0 :(得分:0)
尝试使用Wifi和Cell(移动数据)网络 https://gist.github.com/XinyueZ/fe5f86734730a25638665ad77819d4f8
级别通常定义为0 - 3(最大)getCellStrengthLevel(max: Int = 3)