2013-04-25 9 views
5

Ich sehe, dass wir Klassen für CDMACellLocation und GSMCellLocation haben, aber es gibt nichts Spezifisches für LTE. Kann ich den Standort der LTE-Zelle für den Kontext meines Telefoniedienstes spezifisch festlegen? Danke! Obwohl die API eine Schnittstelle für die Zelleninformationen kann liefern -Wie bekomme ich LTE-Zellstandort in Android?

+0

Sie können die LTE-Informationen nur in API 17 erhalten –

+0

Danke für die Antwort! Ich bin auf API 17. Was ich wissen wollte, war, wie man die CellInfo von der Arraylist, die von der getAllCellInfo() Funktion des TelephonyManager zurückgegeben wurde, extarct. – user1985703

Antwort

-1

Sie können durch die Liste Liste von getAllCellInfo() und prüfen, ob das Cell ein CellInfoLte ist oder nicht durch

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
List<CellInfo> cellInfoList = tm.getAllCellInfo(); 
for (CellInfo cellInfo : cellInfoList) 
{ 
    if (cellInfo instanceof CellInfoLte) 
    { 
     // cast to CellInfoLte and call all the CellInfoLte methods you need 
    } 
} 
+1

Dies beantwortet die Frage nicht. Sobald Sie ein CellInfoLte-Objekt haben, wie erhalten Sie die Standortinformationen? – DataDino

0

Seien Sie vorsichtig, hier zurücklaufen es hängt wirklich vom Träger ab. Im Gegensatz zu CDMA, das Informationen zum Kursstandort als Teil seiner RADIUS-Ausgabe bereitstellen kann, variiert LTE durch die Implementierung. Nur die "unteren" Ebenen des LTE-Netzwerks wissen, wo Sie sind, und das ist bestenfalls unscharf. Ohne die Infrastruktur Ihres Carriers zu kennen, wie Ihre MME funktioniert usw., erhalten Sie vielleicht Informationen, aber ich würde ihnen für Geo-Location-Informationen nicht vertrauen.

Außerdem hängt es davon ab, wie Ihr Träger abfragt. Je nach Geräteprofil können Sie einmal pro Minute, einmal alle fünf Minuten, einmal alle zwei Stunden eine Abfrage durchführen. Wenn Sie herumstreunen, können Sie nichts als Müll bekommen, da es keinen schönen Standard für Werte gibt.

0

können Sie Informationen aus der LTE-Verbindung mit einer bestimmten Umwandlung von Instanzen abrufen, die zur CellInfo-Liste gehören.

MobileInfoRecognizer mobileInfoRecognizer = new MobileInfoRecognizer(); 
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
List<CellInfo> cellInfos = tm.getAllCellInfo(); 
additional_info = mobileInfoRecognizer.getCellInfo(cellInfos.get(0)); 

In meiner Anwendung habe ich festgestellt, dass Sie nur das erste Element in Ihrer Liste nehmen können; Ich zeige Ihnen meine eigene Klasse:

public class MobileInfoRecognizer { 
    public String getCellInfo(CellInfo cellInfo) { 
      String additional_info; 
      if (cellInfo instanceof CellInfoGsm) { 
       CellInfoGsm cellInfoGsm = (CellInfoGsm) cellInfo; 
       CellIdentityGsm cellIdentityGsm = cellInfoGsm.getCellIdentity(); 
       additional_info = "cell identity " + cellIdentityGsm.getCid() + "\n" 
         + "Mobile country code " + cellIdentityGsm.getMcc() + "\n" 
         + "Mobile network code " + cellIdentityGsm.getMnc() + "\n" 
         + "local area " + cellIdentityGsm.getLac() + "\n"; 
      } else if (cellInfo instanceof CellInfoLte) { 
       CellInfoLte cellInfoLte = (CellInfoLte) cellInfo; 
       CellIdentityLte cellIdentityLte = cellInfoLte.getCellIdentity(); 
       additional_info = "cell identity " + cellIdentityLte.getCi() + "\n" 
         + "Mobile country code " + cellIdentityLte.getMcc() + "\n" 
         + "Mobile network code " + cellIdentityLte.getMnc() + "\n" 
         + "physical cell " + cellIdentityLte.getPci() + "\n" 
         + "Tracking area code " + cellIdentityLte.getTac() + "\n"; 
      } else if (cellInfo instanceof CellInfoWcdma){ 
       CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) cellInfo; 
       CellIdentityWcdma cellIdentityWcdma = cellInfoWcdma.getCellIdentity(); 
       additional_info = "cell identity " + cellIdentityWcdma.getCid() + "\n" 
         + "Mobile country code " + cellIdentityWcdma.getMcc() + "\n" 
         + "Mobile network code " + cellIdentityWcdma.getMnc() + "\n" 
         + "local area " + cellIdentityWcdma.getLac() + "\n"; 
      } 
      return additional_info; 
    } 
} 

Also, wenn das Gerät im Test nicht LTE nicht unterstützt, können Sie immer andere Informationen über seine Verbindung erhalten. Hoffe, dass Sie es nützlich finden können.

Verwandte Themen