【问题标题】:cellID and LAC / PSC for 3G neighboring cells in AndroidAndroid 中 3G 相邻小区的 cellID 和 LAC / PSC
【发布时间】:2012-03-30 21:37:51
【问题描述】:

我正在尝试使用 Android 识别 3G 中的相邻小区位置,这是通过 getNeighboringCellInfo() 获得的。当手机工作在 GSM 模式时,我可以使用 getCid() 和 getLac() 来获取 CellID 和 LAC,但是对于 3G,我只能使用 getPsc(),我不太确定它是否足够识别单元格。

谁能告诉我是否可以获得相邻小区的 CellID + LAC?如果这不可能,我如何使用 PSC 代码来识别单元格?

【问题讨论】:

  • 你能告诉我你发现getPsc()工作的手机型号和Android版本吗?如果您能回复,不胜感激。
  • 我遇到了同样的问题,对于 UTMS 网络,它只是无法获取 cellId 和 lac,但它适用于当前连接的手机信号塔。我认为它无法获取当前 api 级别的相邻 cellid。

标签: android location 3g cellid


【解决方案1】:

在UMTS中,PSC是一种本地小区标识符。它是“本地”唯一的,因为所有相邻小区以及这些小区的所有邻居都保证具有与当前小区不同的 PSC。这也意味着您永远不会遇到具有相同 PSC 的两个相邻单元。但是,很可能在该国不同地区存在具有相同 PSC 的小区。

UMTS 小区的 NeighboringCellInfo 将仅设置 PSC,而所有其他字段(MCC、MNC、LAC、CID)将无效。找出这些参数的唯一方法是为您遇到的每个单元存储所有字段(MCC、MNC、LAC、CID 以及 PSC),然后在获得“未知”PSC 时在存储的数据中查找它。 (您需要过滤服务小区的邻居,因为 PSC 只是一个本地唯一 ID,而不是全球唯一 ID)。

作为替代方案,一个小区的 PSC 以及它的一个邻居的 MCC/MNC/LAC/CID 元组也是您可以使用的全球唯一 ID。但是请注意,每个小区都会有多个这样的标识符(每个邻居一个)。

【讨论】:

    【解决方案2】:

    我可以获得相邻小区的 cid 和 rssi。所以你试试这个代码,它只适用于物理材料(不要使用模拟器)。 在这里,您使用 textview 创建您的 android xml。 ;-)

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

    【讨论】:

    • 这没有回答问题。在 UMTS (HSPA) 连接的情况下不设置 cid 和 lac。
    【解决方案3】:

    有时,当同一提供商的多个 CID 共享同一塔/站点,用于增加容量并在同一方向上传输时,具有相同的 PSC。因此,在这些情况下,您可以使用 PSC 来识别站点和波束方向,而不是 CID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 2014-01-06
      相关资源
      最近更新 更多