我成功获得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);
我拥有所有必要的权限。我的邻居列表也返回空,但目前不是问题。
答案 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添加一个测试,并希望能及时得到一些结果。