2

最近我正在尝试使用 Android 设备获取相邻小区信息。我试过很多品牌的安卓手机,比如三星,HTC。结果就是 Htc 可以得到邻区信息。我使用的函数是 TelephonyMananger.getNeiboringCellInfo()。但正如Android API的文档所说,当我想获取3G基站的cell id和信号强度时,我只能得到信号强度值,并且所有相邻的cell id都是-1。所以我改变了我的方法。但是当我使用 TelephonyManager.getAllCellInfo() 时,该方法总是返回一个空对象。之前有人问过这个问题,答案是这个方法的实现总是返回null。这里,我的问题是我们是否可以获得3G基站的邻区信息?我们可以像 getNeighboringCellInfo() 一样自己实现 getAllCellInfo() 方法吗?还有其他方法可以让我们获取3G邻区信息吗?

4

2 回答 2

1

Android 提供了三种不同的方式来获取手机信息:

  • onCellLocationChanged:GSM/UMTS 和 CDMA,仅限于当前(服务)小区。
  • getNeighboringCellInfo:仅限 GSM/UMTS,将获得相邻小区,但并非所有设备都支持
  • onCellInfoChanged:支持所有网络类型,但需要 API 17,并非所有设备都支持

此外,前两个不会返回您需要从 TelephonyManager 单独获取的 MCC/MNC(国家和运营商代码)。

getNeighboringCellInfo只会得到一个标识符:用于 GSM 的 LAC/CID 对,或用于 UMTS 的 PSC。(PSC 在细胞周围环境中是独一无二的。)

onCellInfoChanged 可能不会返回所有单元格类型。这取决于设备 - 有些将onCellLocationChanged用于 GSM/UMTS 小区,并仅通过 报告 LTE 小区onCellInfoChanged

您在这里几乎受设备(或其ROM)的支配。您唯一可以依靠的是第一种和第三种方法的组合将为您提供服务小区。

如果上述方法之一不起作用,则应用程序无能为力。您需要构建自己的 ROM,可能还需要构建 RIL 驱动程序甚至基带固件。在这三层中的任何一层上,开发人员可能已经决定将附近的单元报告给上层是不值得的。

于 2014-07-28T10:27:11.037 回答
0

一些手机不支持 getNeighboringCellInfo(),如许多三星手机(Galaxy S3、Galaxy Nexus 等)。我认为没有解决方案。因为错误不是来自 Android 操作系统。所以你换了另一个版本的Android或者使用其他的功能都不行。

于 2013-07-25T09:42:36.067 回答