getAllCellInfo在android 4.2.1中返回null

时间:2013-05-14 10:46:57

标签: android

我的Android版本是4.2.1,我正在尝试使用TelephonyManager.getAllCellInfo()方法。在我的清单文件中,我拥有ACCESS_COARSE_UPDATESACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION权限。但是该方法返回null

3 个答案:

答案 0 :(得分:8)

来自TelephonyManager.getAllCellInfo() javadoc:

  

这比使用getCellLocation更受欢迎,但对于旧设备,这可能会返回null,在这种情况下应该调用getCellLocation。

Some sources报告此方法仅在CDMA / LTE设备上实施,其他类型的设备(包括GSM / LTE设备)将返回null。在实施的情况下,它将仅返回LTE小区。

TelephonyManager.getCellLocation()将仅返回GSM / UMTS或CDMA小区。它仅限于一个单元,即设备当前注册的单元。如果您确定您的代码仅在GSM / UMTS或CDMA设备上运行,并且您只对设备当前注册的单元感兴趣,这是您最安全的选择。

要获取有关其他周围单元格的信息,请使用TelephonyManager.getNeighboringCellInfo()。但是,它仅限于GSM / UMTS小区。此外,它的实现取决于无线电固件。大多数三星设备(以及其他一些设备)将返回一个空列表。

结论:目前在Android上获取有关附近单元格的信息非常混乱。您可能需要使用所有三种方法的组合来获取所需的信息,即使这样,某些事情也可能无法访问。

答案 1 :(得分:5)

以下命令列出了手机上可用的权限:

adb shell pm list permissions -g

在Nexus 4(4.2.2)上未列出 ACCESS_COARSE_UPDATES 权限。

<强>更新

当查看源代码的主分支时,没有对ACCESS_COARSE_UPDATES的引用,因此这在文档中似乎是错误的。实际上,相关代码仅需要ACCESS_COARSE_LOCATION和/或ACCESS_FINE_LOCATION。

追踪以下内容:

  • TelephonyManager
  • ITelephony
  • PhoneInterfaceManager
  • PhoneGlobals
  • PhoneFactory
  • GsmPhone
  • PhoneBase
  • ServiceStateTracker

在ServiceStateTracker中:

/**
 * @return all available cell information or null if none.
 */
public List<CellInfo> getAllCellInfo() {
    return null;
}

所以看起来在所有情况下它都会返回null。

Here是指向当前缺陷报告的链接。

答案 2 :(得分:-1)

api声明如下:

GetAllCellInfo比使用getCellLocation更受欢迎,但对于较旧的设备,这可能会返回null,在这种情况下应调用getCellLocation