邻区信息不准确

2023-12-09

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

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

  1. a NeighboringCellInfo具有所有属性 -lac, cid, psc- 设置为-1,并且仅rssi字段似乎有意义;
  2. a NeighboringCellInfo with lac等于0;这是否意味着lac与当前活动单元格相同吗?
  3. a NeighboringCellInfo with rssi值超出范围 [0, 31] 并且不UNKNOWN_RSSI;这些值可以是正数(33,如屏幕截图所示),也可以是负数(它们看起来像一个正确的原始 RSSI 值,即不需要从asu);
  4. 在同一地理位置获得的列表元素并没有像我期望的那样表现出一致性,即在两次连续扫描中,每个扫描都可以在另一个扫描中省略一个元素,并且省略元素的 rssi 级别不是最低的列表中的级别(事实上,它们的 RSSI 可能大于当前使用的小区);我承认如果每个细胞信号都趋于一致,这可能是正确的行为very不稳定,但我不确定 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 类似,但名称略有不同:不是 LAC 和 CID,而是 TAC(跟踪区域代码)和 CI(小区标识);您拥有的是 PCI(物理单元 ID)而不是 PSC。然而,它们的功能本质上与 UMTS 同类产品相同。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

邻区信息不准确 的相关文章

随机推荐

  • 后台服务启动两次

    我有以下后台服务 public class MyHostedService BackgroundService private readonly ITaskQueue taskQueue private readonly ILifetime
  • AES 加密和解密

    我用 swift 编写了一个应用程序 我需要 AES 加密和解密功能 我从另一个 Net 解决方案收到了加密数据 但我找不到可以执行此操作的方法 这是我的 net 加密 public static byte AES Encrypt byte
  • 使用 Eclipse 的 java 定时器

    我正在尝试使用 Eclipse 用 Ja va 编写一个小程序 但我有点迷失了 有人可以向我解释一下 以 傻瓜式的方式 我需要做什么才能使用计时器重新绘制表单吗 我正在尝试做一些像时钟一样简单的事情 我需要一个计时器每秒重新绘制它 像这样的
  • 有人可以帮我清理这个吗? (初学者,SQL)[重复]

    这个问题在这里已经有答案了 我正在 hackerrank com 上做练习 SQL 初学者练习 我相信你们很多人都熟悉它 这是问题 从 STATION 查询不以元音开头且不以元音结尾的 CITY 名称列表 您的结果不能包含重复项 我的回答如
  • 将信息发送到上下文菜单的内容脚本

    我见过很多有关上下文菜单和双向通信的问题 看来我知道我的问题的答案 你不能 但无论如何我都会尝试 每个页面上都有一个由 page mod 创建的模态 div 该模式旨在当用户将鼠标悬停在文本节点中的单词上以提供单词的翻译时显示 这工作得很好
  • UILocalNotification 重复

    我想在每周日和周一重复 我怎样才能实现这个目标 尝试设置 2 个通知 其中一个是周日fireDate另一个是星期一fireDate并将两个重复间隔设置为NSWeekCalendarUnit
  • 通过所有必需点到达终点

    给定一个宽度为 W 高度为 H 的网格 其中包含 5 种类型的符号 S means starting position E means ending position C means checkpoints means open posit
  • Maven 不下载代理后面的 jar

    Maven 无法下载代理后面的 jar 依赖项 这是我的 pom xml
  • Hbase 类NotFoundException

    我想运行一个地图缩减示例 package my test import java io IOException import java util HashMap import java util Map import java util M
  • 调试 SignalR 挂起

    Windows 7 SignalR2 我有一些 HelloWorld SignalR 代码 可以在一个 VS2013 项目 即我的 SignalR hello world Playground 中运行 当我将相同的代码添加到现有应用程序时
  • Joomla v1.5 插件 sys.ini 语言文件

    Joomla v1 5 插件可以使用 sys ini 语言文件吗 我想在插件安装期间使用它 因为在安装过程中无法访问默认语言 ini 文件 因此 安装管理器仅输出语言关键常量 例如 PLG MY PLUGIN DESCRIPTION 我在
  • Watson 对话意图和实体是否支持正则表达式?

    我正在使用我公司想要创建的可能对话来测试 Watson Conversation API 我们正在使用巴西葡萄牙语进行开发 鉴于葡萄牙语是一种丰富的语言 有时用户可能会犯错误 我们希望预测这些可能的错误 主要是特殊字符和重音符号 例如 单词
  • 我可以创建一个带有弧形底部的 div 吗?

    所以我正在开发一个网站 我想知道是否可以纯粹使用 HTML5 CSS3 如果需要的话还可以使用 JavaScript 制作一个底部弯曲的 div 所以它实际上看起来像这样 或者只能使用背景图像来完成 div class navbar nav
  • 如何在用户输入的输入类型=文本中附加%符号?

    我正在使用数字微调器 并且默认情况下我希望输入在文本框中包含 符号 我尝试使用跨度 但它在框外添加了符号 您可以使用一个简单的 css 技巧来实现这一点 只需将其添加到您的代码中即可 spinner input padding right
  • 我可以在 Unix 中运行 jshell 吗?

    我想使用expect重定向jshell输入 以便我可以在录制的演示中模拟输入 但是 尽管我可以从 Expect 脚本生成一个 jshell 进程 该进程也可以识别 jshell 提示符 但之后就没有任何效果了 期望输出看起来像控制序列 例如
  • 如何在 verilog 中不使用 while() 循环(用于综合)?

    我已经养成了开发大量测试平台并使用 for 和 while 循环进行测试的习惯 没关系 问题是我已经将这种习惯用于对应该可综合的电路进行编码 XST等拒绝合成代码 无需对合成参数进行额外修改 例如 while num lt test num
  • ImageButton 高度问题

    下午好 我正在尝试创建带有阴影的 ImageButton 要做到这一点
  • 选择 Pandas 中特定月份的行

    我有一个包含 10 多年来 12 小时数据的数据框 所有数据均按日期存储 我想提取包含特定月份数据的列 请注意 该月份不是标准的 1 2 3 格式 我的 日期 列的行如下所示 01 May 07 02 May 07 31 Oct 17 如何
  • 检索文档数据,其中条件值是子集合值

    我在 firestore 上的数据库如下所示 Candidates ID 1 likeDislikeSuper ID 1 data value n ID 2 likeDislikeSuper ID 2 data valu
  • 邻区信息不准确

    我正在尝试利用有关相邻小区的移动信息 该信息可在 Android 上通过TelephonyManager类及其getNeighboringCellInfo方法 下面我发布了完成这项工作的一部分代码 主要取自公开来源 以及该代码产生的输出的一