2012-11-08 17 views
12

Qualcuno sa come recuperare l'elenco di celle su GSM e CDMA su Android.Recupera informazioni sulle celle di celle

mi hanno cercato di utilizzare Google Maps API Sedi: https://developers.google.com/maps/documentation/business/geolocation/

e voglio ottenere cellule torri informazioni con questi campi:

  • CellId: identificatore univoco della cella. Su GSM, questo è l'ID della cella (CID); Le reti CDMA utilizzano l'ID della stazione base (BID).
  • locationAreaCode: il codice di località (LAC) per le reti GSM; Le reti CDMA utilizzano l'ID di rete (NID).
  • mobileCountryCode: Mobile Country Code (MCC) del cellulare.
  • mobileNetworkCode: il codice di rete mobile del cellulare. Questa è la MNC per GSM o l'ID di sistema (SID) per CDMA.
  • età: il numero di millisecondi poiché questa cella era primaria. Se età è 0, cellId rappresenta una misurazione corrente.
  • signalStrength: intensità del segnale radio misurata in dBm.
  • timingAdvance: il valore di anticipo della temporizzazione.

Questo codice non particolarmente ottenere cellule torrette informazioni.

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) {} 
} 

E io impostare le autorizzazioni in questo modo:

<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"/> 

Please help me, grazie.

+4

"Il mio codice funziona tranne ottenere cellule torri informazioni" è una descrizione dei sintomi inutile. Per favore prenditi il ​​tempo di spiegare, in dettaglio, cosa è e cosa non funziona. – CommonsWare

+0

Mi dispiace, l'inglese non è la mia lingua principale. Quando eseguo il codice sul mio Android (l'operatore è sprint), "tel.getNeighboringCellInfo();" ritorna sempre nullo. – wf9a5m75

+0

E anche se provo il codice su altri androide delle reti GSM, ho ottenuto lo stesso risultato. Quindi la mia domanda è come ottenere informazioni sulle torri cellulari. – wf9a5m75

risposta

0

Non è il telefono, che non supporta queste informazioni, è puramente scadente attuazione del C relative RIL e Java utilizzato per fornire quelle API chiama, che impediscono questo. Se riesci a entrare nei menu Service Mode (che variano ampiamente da telefono a telefono) avrai accesso completo e immediato a RSSI e molti altri tipi di segnali. Dovresti dare la colpa a Google (o al tuo OEM) per non aver risolto quei problemi e per avere un migliore accesso alle variabili relative alla RF.

4

Ho avuto questo problema molto più recente ed è finito per essere il fatto che

getNeighboringCellInfo

è deprecato da API 23 in su. Per ovviare a questo uso qualcosa di simile alla seguente (è abbastanza fastidioso, in realtà):

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

Nota che "deprecetad" e "non funziona più" sono due cose diverse: ci sono molte API deprecate che funzionano ancora come una volta, l'unica limitazione è che manca il supporto per nuove funzionalità che potrebbero essere introdotte da allora (come con questo API, che non ha mai avuto alcun supporto adeguato per LTE). Tuttavia, il supporto del fornitore di queste API varia notevolmente. – user149408