Android中用于3G邻区的小区ID和位置区码/扰码。

8
我正在尝试在Android中识别3G网络中的相邻单元位置,这是通过getNeighboringCellInfo()获取的。当手机处于GSM模式时,我能够使用getCid()和getLac()来获取单元ID和位置区码,但是在3G模式下,我只能使用getPsc(),并不确定它是否足以识别一个单元。
请问是否有可能获取相邻单元的单元ID和LAC?如果不可能,如何使用PSC代码来识别一个单元?

иҮ·й—®ж‚ЁењЁе“ҒдёҒ手жњғеһ‹еЏ·е’ЊAndroid版本上发зҺ°дғ†getPsc()еЏҮд»Өж­Әеёёе·ӨдҢњпәџе¦‚жһњж‚ЁиѓҢе›һе¤Қ我将дёҚиѓњж„џжүЂгЂ‚ - Dheeraj Vepakomma
我遇到了同样的问题,对于UTMS网络,它无法获取cellId和lac,但是它可以与当前连接的基站正常工作。我认为它无法在当前API级别下获取相邻的cellid。 - Aaron Ke
3个回答

4
在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。但是,请注意,每个小区将具有多个此类标识符(每个邻居一个)。

3

我可以获取邻近基站的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);
 }   
 }

1
这并没有回答问题。在UMTS(HSPA)连接的情况下,cid和lac是未设置的。 - Gunnar Bernstein

0
有时候,当同一供应商的更多CID共享同一座塔/站点时,用于增加容量并在相同方向传输,它们具有相同的PSC。因此,在这些情况下,您可以使用PSC来识别站点和波束方向,但不能用CID来识别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接