使用GsmCellLocation的getPsc()始终返回-1

时间:2012-05-16 07:17:39

标签: android gsm telephonymanager cellular-network umts

我成功获得GsmCellLocation及相关的cid和lac信息,但服务小区的PSC(主扰码)总是以初始值-1返回。 任何人都能获得服务小区的真实PSC值吗?

telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
psc = cellLocation.getPsc();
Log.d(TAG, "PSC = " + psc);

我拥有所有必要的权限。我的邻居列表也返回空,但目前不是问题。

2 个答案:

答案 0 :(得分:1)

PSC仅适用于UMTS网络 检查网络类型getNetworkType,如果它是NETWORK_TYPE_UMTS而不是NETWORK_TYPE_EDGE

答案 1 :(得分:0)

我已经读到这可以在某些手机上运行 - 谷歌nexus手机就是其中之一。

我试图在我的Motorolla Razr上运行你的测试代码 - 它返回-1。

通过查看android源代码(GsmServiceStateTracker.java),看起来这个功能是可选的,很可能在很多手机上都没有实现。您正在寻找的信息是作为来自GSM调制解调器的未经请求的消息发送的,并且除了从getPsc()返回的值之外,其他任何内容都没有用(据我所知,从Android源代码中看到)。

我的意思是为什么要实施它,如果你没有。

我还尝试扩展您的测试代码以获取有关相邻单元格的信息,这些信息也可用于获取其PSC值。它不起作用,因为用于获取相邻小区信息的at命令未在我的手机的GSM调制解调器中实现。

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
Log.d(TAG, "cid = " + cellLocation.getCid());
Log.d(TAG, "lac = " + cellLocation.getLac());

int psc = cellLocation.getPsc();
Log.d(TAG, "PSC = " + psc);

List<NeighboringCellInfo> neighCell = null; 
neighCell = telephonyManager.getNeighboringCellInfo();  
for (int i = 0; i < neighCell.size(); i++) 
{
    NeighboringCellInfo thisCell = neighCell.get(i);  
    int CID = thisCell.getCid();  
    int RSSI = thisCell.getRssi();
    int PSC = thisCell.getPsc();
    Log.d(TAG, " "+CID+" - "+RSSI + " - " + PSC);
}

如果你真的想知道手机实现了什么,你应该在some benchmark app添加一个测试,并希望能及时得到一些结果。