Информация о соседних ячейках неточная

я пытаюсь использовать мобильную информацию о соседних ячейках, доступную на Android черезTelephonyManager класс и егоgetNeighboringCellInfo метод. Ниже яm размещение части кода (в основном взятой из общедоступных источников), которая выполняет эту работу, и один пример вывода, который производит этот код (показан на прилагаемом скриншоте). Код и изображение размещеныкак есть" без каких-либо изменений, поэтому должно быть относительно легко связать одно с другим и убедиться, что оно работает правильно (конечно, могут быть ошибки, которые я пропустил).

Проблема в том, что список соседних ячеек часто содержит элементы с "неправильно» (в моем понимании) данные, такие как:

NeighboringCellInfo со всеми свойствами -,,laccidpsc - установить -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);

Ответы на вопрос(2)

Ваш ответ на вопрос