Информация о соседних ячейках неточная
я пытаюсь использовать мобильную информацию о соседних ячейках, доступную на Android черезTelephonyManager
класс и егоgetNeighboringCellInfo
метод. Ниже яm размещение части кода (в основном взятой из общедоступных источников), которая выполняет эту работу, и один пример вывода, который производит этот код (показан на прилагаемом скриншоте). Код и изображение размещеныкак есть" без каких-либо изменений, поэтому должно быть относительно легко связать одно с другим и убедиться, что оно работает правильно (конечно, могут быть ошибки, которые я пропустил).
Проблема в том, что список соседних ячеек часто содержит элементы с "неправильно» (в моем понимании) данные, такие как:
NeighboringCellInfo
со всеми свойствами -,,lac
cid
psc
- установить -1, и толькоrssi
поле кажется значимым;NeighboringCellInfo
сlac
равно 0; Означает ли это, чтоlac
такое же, как текущая активная ячейка?NeighboringCellInfo
сrssi
значение вне диапазона [0, 31], а неUNKNOWN_RSSI
; такие значения могут быть как положительными (33, как показано на скриншоте), так и отрицательными (они выглядят как правильное необработанное значение rssi, то есть без необходимости преобразования изasu
);элементы списка, полученные в одной и той же геолокации, не демонстрируют согласованность настолько, насколько яЯ ожидаю, что в двух последовательных сканированиях каждый может иметь элемент, опущенный в другом, и пропущенные элементы ' Уровни rssi не находятся на самом низком уровне в списке (на самом деле их rssi 's может быть больше, чем для используемой в данный момент ячейки); Я признаю, что это может быть правильным поведением, если сигнал каждой ячейки имеет тенденциюочень неустойчиво, но яя не уверен, если этов целом верно для сетей GSM и / или UMTS. В текущей ячейке всегда все поля определены четко, но ее rssi может очень быстро изменяться в диапазоне 30 дБм (скажем, от -60 до -90).Так же, как 4, но о согласованности от одного дня к другому. В сильно урбанизированной и зрелой среде яЯ ожидаю увидеть один и тот же список ячеек каждый день, но они меняются таким образом, что однажды я недаже не было упоминания о клетке, которая была активной клеткой в предыдущий день.Означает ли все это нормальное функционирование мобильных технологий, какие-то, возможно, энергосберегающие оптимизации, или изъян в конкретном устройстве (LG Optimus One в моем случае)?
Пожалуйста, предложите, как можно получить постоянные показания из сотовой среды на Android, если это возможно.
GsmCellLocation cellLocation = (GsmCellLocation)telephonyManager.getCellLocation();
String networkOperator = telephonyManager.getNetworkOperator();
int type = telephonyManager.getNetworkType();
String mcc = networkOperator.substring(0, 3);
String mnc = networkOperator.substring(3);
textMCC.setText("mcc: " + mcc + " mnc: " + mnc);
textMNC.setText("operator: " + networkOperator);
int cid = cellLocation.getCid();
int lac = cellLocation.getLac();
int psc = cellLocation.getPsc();
textGsmCellLocation.setText(cellLocation.toString());
textCID.setText("lac: " + String.valueOf(lac) + " cid: " + String.valueOf(cid) + " psc: " + String.valueOf(psc) + " type: " + String.valueOf(type) + " rssi: " + String.valueOf(currentCellRSSI));
TextView Neighboring = (TextView)findViewById(R.id.neighboring);
List NeighboringList = telephonyManager.getNeighboringCellInfo();
String stringNeighboring = "Neighboring List - Lac : Cid : Psc : type : RSSI\n";
for(int i = 0; i < NeighboringList.size(); i++)
{
String dBm;
int rssi = NeighboringList.get(i).getRssi();
if(rssi == NeighboringCellInfo.UNKNOWN_RSSI)
{
dBm = "Unknown RSSI";
}
else
{
if(rssi >= 0 && rssi < 32)
{
dBm = String.valueOf(-113 + 2 * rssi) + " dBm";
}
else
{
dBm = "Unknown value:" + Integer.toString(rssi);
}
}
stringNeighboring = stringNeighboring
+ String.valueOf(NeighboringList.get(i).getLac()) + " : "
+ String.valueOf(NeighboringList.get(i).getCid()) + " : "
+ String.valueOf(NeighboringList.get(i).getPsc()) + " : "
+ String.valueOf(NeighboringList.get(i).getNetworkType()) + " : "
+ dBm + "\n";
}
Neighboring.setText(stringNeighboring);