Android тянет LTE RSRP значение
Во-первых, вот мой код для получения значений lte rsrp (или других). Этот фрагмент кода работает на другой aysncTask.
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int tempInt;
while (isRunning) {
try {
List<CellInfo> cellInfoList = tm.getAllCellInfo();
if (cellInfoList != null && cellInfoList.size() != 0) {
msg = handler.obtainMessage();
CellInfo cellInfo = cellInfoList.get(0);
result = -9999;
tempInt = 0;
if (cellInfo instanceof CellInfoWcdma) {
result = ((CellInfoWcdma) cellInfo).getCellSignalStrength().getDbm();
Log.e(TAG, "3G : " + result + "");
} else if (cellInfo instanceof CellInfoLte) {
result = ((CellInfoLte) cellInfo).getCellSignalStrength().getDbm();
Log.e(TAG, "LTE : " + result);
} else if (cellInfo instanceof CellInfoGsm) {
result = ((CellInfoGsm) cellInfo).getCellSignalStrength().getDbm();
Log.e(TAG, "GSM" + result);
} else if (cellInfo instanceof CellInfoCdma) {
result = ((CellInfoCdma) cellInfo).getCellSignalStrength().getDbm();
Log.e(TAG, "CDMA" + result);
}
.....
Проблема в том, что я не уверен, что данные, которые я получаю, верны.
Пока я запускаю этот источник в фоновом режиме, чтобы увидеть значение rsrp, я запускаю скрытое меню моего LG G3 с помощью команды *123456#. Он показывает режим отладки, показывающий значение rsrp в реальном времени.
Проблема в том, что rsrp, который я получаю в журнале моего приложения, а в скрытом меню в большинстве случаев отличается. Мое приложение показывает около -3 ~ +3 больше.
Почему это происходит? Что-то не так с моим кодом? Приведенный выше код не имеет временных интервалов и будет продолжаться до того, как я принудительно закрою приложение.
1 ответ
Ничего плохого в вашем коде. Если вы проверите документы стандартов 3GPP, вы увидите, что производителям устройств предоставляется некоторое пространство при сообщении о RSRP, разброс 16 дБ, то есть они должны быть в пределах +/-8 дБ. Тот факт, что вы все еще находитесь в этом диапазоне, говорит мне, что ваш код, вероятно, в порядке. Кроме того, выполнение секретного кода в то же время, что и ваше приложение, может дать вам противоречивые показания. Что вам действительно нужно сделать, так это найти одно место, где вы получаете постоянное считывание RSRP с использованием секретного кода телефона (обязательно отключите ваш LTE и Wi-Fi, если они включены, вы получите помехи. Я знаю, что повернуть ваш контр-интуитивно LTE выключен, если вы пытаетесь получить свой LTE RSRP, но именно так он и был разработан.). Как только вы получите хорошее чтение, снова включите LTE, но не включайте Wi-Fi (он все еще может мешать) и откройте свое приложение, чтобы получить оттуда показание RSRP. Если RSRP вашего приложения находится в пределах +/-8 дБ от RSRP, полученного из полевого режима телефонов, то вы в порядке.
Для вашего сведения, вот созданное мной приложение для Android, которое захватывает RSRP среди других параметров LTE: https://github.com/parksjg/IndoorLTE3a