Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cellID and LAC / PSC for 3G neighboring cells in Android

I am trying to identify the neighboring cells location in 3G with Android, which I get with getNeighboringCellInfo(). When The phone works in GSM mode, I am able to use getCid() and getLac() to get the CellID and the LAC, but for 3G, I can only use getPsc(), which I'm not very sure if it's enough to identify a cell.

Can anybody please tell me if I can get the CellID + LAC for neighboring cells? And if that's not possible, how can I use the PSC code to identify a cell?

like image 881
modellero Avatar asked Mar 14 '12 12:03

modellero


People also ask

What is PSC in 3g?

In UMTS, the PSC is a kind of local cell identifier. It is "locally" unique in that all neighboring cell, as well as all neighbors of these cells, are guaranteed to have a different PSC than the current cell. It also means that you will not ever encounter two neighboring cells with the same PSC.

What is PSC in cell tower?

The PSC is a pseudonoise sequence used in the WCDMA multiple access technology, while the CGI is just an identifier used in UMTS (which employs WCDMA).

What is PSC in LTE?

Primary scrambling code: it is similar to Bcch in 2g in that it identifies the cell by ue in downlink.


2 Answers

In UMTS, the PSC is a kind of local cell identifier. It is "locally" unique in that all neighboring cell, as well as all neighbors of these cells, are guaranteed to have a different PSC than the current cell. It also means that you will not ever encounter two neighboring cells with the same PSC. However, there may well be cells with the same PSC located in different parts of the country.

The NeighboringCellInfo for a UMTS cell will only have the PSC set while all other fields (MCC, MNC, LAC, CID) will be invalid. The only way to find out these parameters would be to store all fields (MCC, MNC, LAC, CID as well as PSC) for every cell you encounter, then upon getting an "unknown" PSC look it up in the stored data. (You would need to filter for neighbors of the serving cell, as the PSC is only a locally unique ID, not a globally unique one).

As an alternative, the PSC of a cell along with the MCC/MNC/LAC/CID tuple of one of its neighbors is also a globally unique ID that you could use. Be aware, however, that each cell would have multiple such identifiers (one for each neighbor).

like image 127
user149408 Avatar answered Sep 20 '22 08:09

user149408


I can get cid and rssi for neighbor cells. So you try this code and it works only on physical material (do not use emulator). here you create your android xml with 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);
 }   
 }
like image 39
13KZ Avatar answered Sep 22 '22 08:09

13KZ