Почему константы в SignalStrength скрыты? - PullRequest
0 голосов
/ 07 ноября 2018

Я использую 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 голосов
/ 07 ноября 2018

Слово /** @hide */ просто сообщает, что API недоступен из SDK. Я думаю, что это может быть по соображениям безопасности.

Проверить это сообщение

0 голосов
/ 07 ноября 2018

В документации 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()
...