2012-03-14 19 views
5

Sto cercando di identificare la posizione delle celle vicine in 3G con Android, che ottengo con getNeighboringCellInfo(). Quando il telefono funziona in modalità GSM, sono in grado di utilizzare getCid() e getLac() per ottenere il CellID e il LAC, ma per 3G, posso solo usare getPsc(), che non sono molto sicuro se è sufficiente identificare una cellula.cellID e LAC/PSC per celle vicine 3G in Android

Qualcuno può dirmi se posso ottenere il CellID + LAC per le celle adiacenti? E se ciò non è possibile, come posso usare il codice PSC per identificare una cella?

+0

Puoi dirmi in quale modello di telefono e versione di Android hai trovato 'getPsc()' funzionante? Apprezzalo se potresti rispondere. –

+0

Ho lo stesso problema, per la rete UTMS, non riesco a ottenere il cellId e il lac, ma funziona bene con l'attuale torre cellulare connessa. Penso che non possa ottenere il cellid vicino per l'attuale livello di API. –

risposta

3

Posso ottenere cid e rssi per le celle adiacenti. Quindi provi questo codice e funziona solo su materiale fisico (non utilizzare l'emulatore). qui si crea il tuo android xml con textview. ;-)

package app.tel; 
import java.util.List; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.telephony.NeighboringCellInfo; 
import android.telephony.TelephonyManager; 
import android.telephony.gsm.GsmCellLocation; 
import android.widget.TextView; 


public class TelephActivity extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    TextView textGsmCellLocation = (TextView)findViewById(R.id.gsmcelllocation); 
    TextView textMCC = (TextView)findViewById(R.id.mcc); 
    TextView textMNC = (TextView)findViewById(R.id.mnc); 
    TextView textCID = (TextView)findViewById(R.id.cid); 

    //retrieve a reference to an instance of TelephonyManager 
    TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
    GsmCellLocation cellLocation = (GsmCellLocation)telephonyManager.getCellLocation(); 

    String networkOperator = telephonyManager.getNetworkOperator(); 
    String mcc = networkOperator.substring(0, 3); 
    String mnc = networkOperator.substring(3); 
    textMCC.setText("mcc: " + mcc); 
    textMNC.setText("mnc: " + mnc); 

    int cid = cellLocation.getCid(); 
    //int lac = cellLocation.getLac(); 
    textGsmCellLocation.setText(cellLocation.toString()); 
    textCID.setText("gsm cell id: " + String.valueOf(cid)); 

    TextView Neighboring = (TextView)findViewById(R.id.neighboring); 
    List<NeighboringCellInfo> NeighboringList = telephonyManager.getNeighboringCellInfo(); 

    String stringNeighboring = "Neighboring List- Lac : Cid : 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{ 
    dBm = String.valueOf(-113 + 2 * rssi) + " dBm"; 
    } 

    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); 
} 
} 
+1

Questo non risponde alla domanda. cid e lac non sono impostati in caso di connessione UMTS (HSPA). –

3

In UMTS, il PSC è un tipo di identificatore di cella locale. È "localmente" unico nel fatto che a tutte le celle vicine, così come a tutti i vicini di queste celle, è garantito un PSC diverso rispetto alla cella corrente. Significa anche che non incontrerai mai due celle vicine con lo stesso PSC. Tuttavia, potrebbero esserci celle con lo stesso PSC situate in diverse parti del paese.

Il NeighboringCellInfo per una cella UMTS avrà solo il set PSC mentre tutti gli altri campi (MCC, MNC, LAC, CID) non saranno validi. L'unico modo per scoprire questi parametri sarebbe quello di memorizzare tutti i campi (MCC, MNC, LAC, CID e PSC) per ogni cella che si incontra, quindi quando si ottiene un PSC "sconosciuto" cercare nei dati memorizzati. (Dovresti filtrare per i vicini della cella servente, poiché il PSC è solo un ID localmente unico, non uno globalmente unico).

In alternativa, il PSC di una cella insieme alla tupla MCC/MNC/LAC/CID di uno dei suoi vicini è anche un ID univoco globale che è possibile utilizzare. Siate consapevoli, tuttavia, che ogni cella avrebbe più identificatori di questo tipo (uno per ogni vicino).

0

A volte quando più CID dello stesso provider condividono la stessa torre/sito, utilizzati per aumentare la capacità e trasmettere nella stessa direzione, hanno lo stesso PSC. Quindi in questi casi è possibile utilizzare PSC per identificare il sito e la direttrice del fascio ma non il CID.

Problemi correlati