为什么在SignalStrength中隐藏常量?

时间:2018-11-07 10:19:56

标签: android telephonymanager

在发送短信之前,我使用SignalStength来获取信号质量:

signalStrength.getLevel()

然后我想将整数与SignalStength中的静态常量进行比较:

if (signalStrengthLevel == SignalStrength.SIGNAL_STRENGTH_POOR) {
    //...
}

但是它不能在 Android Studio 中编译。我意识到,由于某些原因,这些常量在源代码中被标记为隐藏:

/** @hide */
public static final int SIGNAL_STRENGTH_POOR
        = TelephonyProtoEnums.SIGNAL_STRENGTH_POOR; // = 1

哪个强迫我将这些常量复制/粘贴到我自己的一个类中...

然后我想知道是否有人知道开发人员决定将这些常量标记为隐藏的原因吗?

2 个答案:

答案 0 :(得分:0)

TelephonyManager的文档中,我们可以找到getSignalStrength()方法,该方法返回SignalStrength类型,该方法具有getLevel()方法。在getLevel()方法的文档中,我们可以阅读有关返回的整数值的以下信息:

  

0到4的单个整数,表示一般信号质量。   这可以考虑许多不同的无线电技术输入。 0   代表非常差的信号强度,而4代表非常强的信号强度   信号强度。

考虑到这一点,我将通过以下方式解决该问题: 创建静态值,例如:

private final static int VERY_POOR_SIGNAL = 0;
private final static int POOR_SIGNAL = 1;
private final static int MEDIUM_SIGNAL = 2;
private final static int STRONG_SIGNAL = 3;
private final static int VERY_STRONG_SIGNAL = 4;

并使用此值将它们与以下方法返回的整数值进行比较:

telephonyManager.getSignalStrength().getLevel()

答案 1 :(得分:0)

/** @hide */一词仅表明该API无法从SDK访问。我认为可能是出于安全原因。

Check this post