gpt4 book ai didi

java - 邻区信息不准确

转载 作者:搜寻专家 更新时间:2023-11-01 09:04:08 24 4
gpt4 key购买 nike

我正在尝试利用有关相邻小区的移动信息,Android 上可通过 TelephonyManager 类及其 getNeighboringCellInfo 方法获取这些信息。下面我发布了完成这项工作的一部分代码(大部分来自公开来源),以及此代码生成的一个输出示例(如所附屏幕截图所示)。代码和图像“按原样”放置,没有任何更改,因此应该相对容易地将一个与另一个关联起来并确保它们正确工作(当然,可能存在我忽略的错误)。

问题是相邻单元格的列表通常包含具有“不正确”(据我理解)数据的元素,例如:

  1. 具有所有属性的 NeighboringCellInfo - laccidpsc - 设置为 -1,并且仅rssi 字段似乎有意义;
  2. a NeighboringCellInfolac 等于 0;这是否意味着 lac 与当前 Activity 单元格相同?
  3. NeighboringCellInforssi 值超出 [0, 31] 范围且不在 UNKNOWN_RSSI 范围内;这些值可以是正数(33,如屏幕截图所示),也可以是负数(它们看起来像一个合适的原始 rssi 值,不需要从 asu 转换);
  4. 在同一地理位置中获得的列表元素并没有像我预期的那样表现出一致性,即在两次连续扫描中,每个人都可以在另一个人中省略一个元素,并且被省略的元素的 rssi 级别不是列表中的最低级别(事实上,它们的 RSSI 可能大于当前使用的小区);我承认,如果每个小区信号都趋于非常不稳定,这可能是正确的行为,但我不确定 GSM 和/或 UMTS 网络是否普遍如此。当前小区始终具有定义良好的所有字段,但其 rssi 可以在 30 dBm 的范围内快速变化(比如从 -60 到 -90)。
  5. 与 4 相同,但关于一天与另一天的一致性。在一个高度城市化和成熟的环境中,我希望每天都能看到相同的细胞列表,但它们的变化方式如此之多,以至于有一天我什至看不到关于以前活跃细胞的提及一天。

所有这些是否意味着移动技术的正常运行、某种可能的节能优化或特定设备(在我的例子中是 LG Optimus One)存在缺陷?

如果可能的话,请建议如何从 Android 上的单元环境中获得一致的读数。

GsmCellLocation cellLocation = (GsmCellLocation)telephonyManager.getCellLocation();

String networkOperator = telephonyManager.getNetworkOperator();
int type = telephonyManager.getNetworkType();
String mcc = networkOperator.substring(0, 3);
String mnc = networkOperator.substring(3);
textMCC.setText("mcc: " + mcc + " mnc: " + mnc);
textMNC.setText("operator: " + networkOperator);

int cid = cellLocation.getCid();
int lac = cellLocation.getLac();
int psc = cellLocation.getPsc();
textGsmCellLocation.setText(cellLocation.toString());
textCID.setText("lac: " + String.valueOf(lac) + " cid: " + String.valueOf(cid) + " psc: " + String.valueOf(psc) + " type: " + String.valueOf(type) + " rssi: " + String.valueOf(currentCellRSSI));

TextView Neighboring = (TextView)findViewById(R.id.neighboring);
List<NeighboringCellInfo> NeighboringList = telephonyManager.getNeighboringCellInfo();

String stringNeighboring = "Neighboring List - Lac : Cid : Psc : type : 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
{
if(rssi >= 0 && rssi < 32)
{
dBm = String.valueOf(-113 + 2 * rssi) + " dBm";
}
else
{
dBm = "Unknown value:" + Integer.toString(rssi);
}
}

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

enter image description here

最佳答案

相邻小区以两种不同的方式报告:

在 GSM/GPRS(这似乎是您截图时所在的网络)上,您应该获得相邻小区的 MCC/MNC/LAC/CID 元组。我看到您获得了有效的 CID 值。如果您在 GSM (2.xG) 网络上,PSC 将始终为 -1,因为 PSC 在 GSM 上没有意义(PSC 是 CDMA 参数,而 GSM 是基于 TDMA 的)。

在 UMTS 上情况有所不同:对于相邻小区,仅报告 PSC,除非您连接到它们,否则您不会发现它们的其他参数。

LTE 原则上类似于 UMTS,但名称略有不同:您使用 TAC(跟踪区号)和 CI(小区标识)代替 LAC 和 CID;你有一个 PCI(物理单元 ID)而不是 PSC。但是,它们的作用与 UMTS 对应物基本相同。

但是请注意,设备之间的实现差异很大:有些手机即使在 3G 网络上也不会报告 PSC,而有些手机永远不会报告相邻小区。 Nexus S(与大多数三星制造的设备一样)均未报告。

但不确定 LAC=0。它可能意味着“与当前小区相同的 LAC”,在这种情况下,查看位置区域边界的输出会很有趣,电话可以在该区域接收具有多个 LAC 的小区。 (我们会看到来自两个 LA 的细胞吗?还是仅来自“我们的”LA?对于来自邻近 LA 的细胞,报告的 LAC 是什么?)

关于java - 邻区信息不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13208236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com