2012-11-08 28 views
12

Kann jemand Handy-Liste auf GSM und CDMA auf Android abrufen.Abrufen von Mobilfunkmasten Informationen

Ich habe versucht, Google Maps API Standorte zu verwenden: https://developers.google.com/maps/documentation/business/geolocation/

Und ich will Mobilfunkmasten Informationen mit diesen Bereichen erhalten:

  • CELLID: Eindeutige Kennung der Zelle. Bei GSM ist dies die Zellen-ID (CID); CDMA-Netzwerke verwenden die Base Station ID (BID).
  • locationAreaCode: Der Location Area Code (LAC) für GSM-Netze; CDMA-Netzwerke verwenden Netzwerk-ID (NID).
  • mobileCountryCode: Der Mobile Country Code (MCC) des Mobilfunkmastens.
  • mobileNetworkCode: Mobilfunkcode des Mobilfunkmastens. Dies ist der MNC für GSM oder die System-ID (SID) für CDMA.
  • Alter: Die Anzahl der Millisekunden, seit diese Zelle primär war. Wenn das Alter 0 ist, stellt die cellId eine aktuelle Messung dar.
  • signalStrength: Die Stärke des Funksignals wird in dBm gemessen.
  • timingAdvance: Der Zeitvorlaufwert.

Dieser Code vor allem keine Zelle immer Türme Informationen.

TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 

// Type of the network 
int phoneTypeInt = tel.getPhoneType(); 
String phoneType = null; 
phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_GSM ? "gsm" : phoneType; 
phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_CDMA ? "cdma" : phoneType; 
try { 
    if (phoneType != null) { 
    params.put("radioType", phoneType); 
    } 
} catch (Exception e) {} 

/* 
* The below code doesn't work I think. 
*/ 
JSONArray cellList = new JSONArray(); 
List<NeighboringCellInfo> neighCells = tel.getNeighboringCellInfo(); 
for (int i = 0; i < neighCells.size(); i++) { 
    try { 
    JSONObject cellObj = new JSONObject(); 
    NeighboringCellInfo thisCell = neighCells.get(i); 
    cellObj.put("cellId", thisCell.getCid()); 
    cellList.put(cellObj); 
    } catch (Exception e) {} 
} 
if (cellList.length() > 0) { 
    try { 
    params.put("cellTowers", cellList); 
    } catch (JSONException e) {} 
} 

Und ich Berechtigungen wie folgt festgelegt:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
<uses-permission android:name="android.permission.INTERNET"/> 

Bitte helfen Sie mir, danke.

+4

„außer Mein Code funktioniert immer Zelle Turm Informationen“ eine nutzlose Beschreibung der Symptome sind. Bitte nehmen Sie sich die Zeit, um im Detail zu erklären, was funktioniert und was nicht. – CommonsWare

+0

Entschuldigung, Englisch ist nicht meine Muttersprache. Wenn ich den Code auf meinem Android (Träger ist sprint) ausführen, "tel.getNeighboringCellInfo();" gibt immer null zurück. – wf9a5m75

+0

Und auch wenn ich den Code auf anderen Android GSM-Netzwerken versuche, habe ich das gleiche Ergebnis. Also meine Frage ist, wie man Zellenmasten Informationen erhält. – wf9a5m75

Antwort

0

Es ist nicht Ihr Telefon, die nicht diese Informationen nicht unterstützt, es ist rein crappy Umsetzung der RIL im Zusammenhang C und Java verwendet diejenigen API zur Verfügung zu stellen Anrufe, die dies verhindern. Wenn Sie es schaffen, in die Service Mode Menüs zu gelangen (die von Telefon zu Telefon stark variieren), haben Sie vollen und sofortigen Zugriff auf RSSI und viele andere Arten von Signalen. Sie sollten Google (oder Ihren OEM) dafür zur Verantwortung ziehen, dass diese Probleme nicht behoben werden und Sie einen besseren Zugriff auf RF-bezogene Variablen erhalten.

4

hatte ich dieses Problem viel mehr vor kurzem und es war dann aber die Tatsache, dass

getNeighboringCellInfo

von API 23 bis veraltet. um diese Verwendung so etwas wie die folgenden (es ist ziemlich ärgerlich, wirklich) zu erhalten:

public static JSONArray getCellInfo(Context ctx){ 
     TelephonyManager tel = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE); 

     JSONArray cellList = new JSONArray(); 

// Type of the network 
     int phoneTypeInt = tel.getPhoneType(); 
     String phoneType = null; 
     phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_GSM ? "gsm" : phoneType; 
     phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_CDMA ? "cdma" : phoneType; 

     //from Android M up must use getAllCellInfo 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 



      List<NeighboringCellInfo> neighCells = tel.getNeighboringCellInfo(); 
      for (int i = 0; i < neighCells.size(); i++) { 
       try { 
        JSONObject cellObj = new JSONObject(); 
        NeighboringCellInfo thisCell = neighCells.get(i); 
        cellObj.put("cellId", thisCell.getCid()); 
        cellObj.put("lac", thisCell.getLac()); 
        cellObj.put("rssi", thisCell.getRssi()); 
        cellList.put(cellObj); 
       } catch (Exception e) { 
       } 
      } 

     } else { 
      List<CellInfo> infos = tel.getAllCellInfo(); 
      for (int i = 0; i<infos.size(); ++i) { 
       try { 
        JSONObject cellObj = new JSONObject(); 
        CellInfo info = infos.get(i); 
        if (info instanceof CellInfoGsm){ 
         CellSignalStrengthGsm gsm = ((CellInfoGsm) info).getCellSignalStrength(); 
         CellIdentityGsm identityGsm = ((CellInfoGsm) info).getCellIdentity(); 
         cellObj.put("cellId", identityGsm.getCid()); 
         cellObj.put("lac", identityGsm.getLac()); 
         cellObj.put("dbm", gsm.getDbm()); 
         cellList.put(cellObj); 
        } else if (info instanceof CellInfoLte) { 
         CellSignalStrengthLte lte = ((CellInfoLte) info).getCellSignalStrength(); 
         CellIdentityLte identityLte = ((CellInfoLte) info).getCellIdentity(); 
         cellObj.put("cellId", identityLte.getCi()); 
         cellObj.put("tac", identityLte.getTac()); 
         cellObj.put("dbm", lte.getDbm()); 
         cellList.put(cellObj); 
        } 

       } catch (Exception ex) { 

       } 
      } 
     } 

     return cellList; 
    } 
+1

Beachten Sie, dass "deprecetad" und "nicht mehr funktionieren" zwei verschiedene Dinge sind - es gibt viele veraltete APIs, die immer noch wie gewohnt funktionieren, die einzige Einschränkung ist, dass sie keine Unterstützung für neue Funktionen haben, die möglicherweise seither eingeführt wurden (wie hier) API, die LTE nie richtig unterstützt hat). Die Unterstützung dieser APIs durch den Anbieter ist jedoch sehr unterschiedlich. – user149408

Verwandte Themen