Informationen zu Nachbarzellen sind ungenau

Ich versuche, mobile Informationen über benachbarte Zellen zu nutzen, die auf Android über verfügbar sindTelephonyManager Klasse und seinegetNeighboringCellInfo Methode. Unten poste ich einen Teil des Codes (meistens aus öffentlich zugänglichen Quellen), der die Aufgabe erfüllt, und ein Beispiel für die Ausgabe, die dieser Code erzeugt (siehe angehängten Screenshot). Der Code und das Bild werden unverändert platziert, daher sollte es relativ einfach sein, sie miteinander zu verknüpfen und sicherzustellen, dass sie ordnungsgemäß funktionieren (natürlich kann es Fehler geben, die ich übersehen habe).

Das Problem ist, dass die Liste benachbarter Zellen häufig Elemente mit (nach meinem Verständnis) "falschen" Daten enthält, wie zum Beispiel:

a NeighboringCellInfo mit allen Eigenschaften -lac, cid, psc - auf -1 setzen und nurrssi Feld scheint sinnvoll;a NeighboringCellInfo mitlac gleich 0; Bedeutet dies, dass dielac ist das gleiche wie aktuell aktive Zelle?a NeighboringCellInfo mitrssi Wert außerhalb des Bereichs [0, 31] und nichtUNKNOWN_RSSI; Solche Werte können positiv (33, wie im Screenshot gezeigt) oder negativ sein (sie sehen aus wie ein richtiger RAW-RSS-Wert, von dem keine Konvertierung erforderlich ist)asu);Listenelemente, die an derselben geografischen Position abgerufen wurden, weisen nicht die erwartete Konsistenz auf, dh bei zwei aufeinanderfolgenden Scans kann bei jedem Element ein anderes weggelassen werden, und die RSSI-Werte der weggelassenen Elemente sind nicht besonders niedrig Ebene in der Liste (tatsächlich können ihre RSS-Dateien größer sein als für die aktuell verwendete Zelle); Ich gebe zu, dass dies das richtige Verhalten sein könnte, wenn jedes Zellsignal dazu neigtsehr instabil, aber ich bin mir nicht sicher, ob dies für GSM- und / oder UMTS-Netze allgemein zutrifft. In der aktuellen Zelle sind immer alle Felder gut definiert, aber der RSS-Wert kann sehr schnell in einem Bereich von 30 dBm (z. B. von -60 bis -90) variieren.Das Gleiche wie 4, aber ungefähr von einem Tag zum anderen. In einer hoch urbanisierten und ausgereiften Umgebung würde ich erwarten, dass jeden Tag die gleiche Liste von Zellen angezeigt wird, die sich jedoch so unterscheiden, dass ich eines Tages nicht einmal eine Erwähnung über eine Zelle sehe, die in einer vorherigen Zelle aktiv war Tag.

Bedeutet das alles ein normales Funktionieren der Mobiltechnologie, eine Art möglicherweise energiesparender Optimierungen oder einen Fehler in einem bestimmten Gerät (in meinem Fall LG Optimus One)?

Bitte schlagen Sie vor, wie man unter Android konsistente Messwerte aus der Zellumgebung erhalten kann, wenn dies möglich ist.

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<NeighboringCellInfo> 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);

Antworten auf die Frage(2)

Ihre Antwort auf die Frage