【问题标题】:android - detect low network signal, which value to rely onandroid - 检测低网络信号,依赖哪个值
【发布时间】:2016-09-27 12:03:06
【问题描述】:

我想检测用户在某个时间(例如 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 是一个有很多值的类,我只是想知道对于 一些时间,看看人们是否对此有一些经验。

【问题讨论】:

    标签: java android networking device dbm


    【解决方案1】:

    尝试 Wifi 和 Cell(移动数据)Net 的级别 https://gist.github.com/XinyueZ/fe5f86734730a25638665ad77819d4f8

    级别通常定义为 0 - 3(最大值)getCellStrengthLevel(max: Int = 3)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      相关资源
      最近更新 更多