android 4.2.1中getAllCellInfo返回null
我的Android版本是4.2.1,我正在尝试使用android 4.2.1中getAllCellInfo返回null,android,telephonymanager,Android,Telephonymanager,我的Android版本是4.2.1,我正在尝试使用TelephonyManager.getAllCellInfo()方法。在我的清单文件中,我拥有ACCESS\u rough\u UPDATES,ACCESS\u rough\u LOCATION,ACCESS\u FINE\u LOCATION权限。但是,该方法返回null以下命令列出了手机上可用的权限: adb shell pm list permissions -g 在Nexus 4(4.2.2)上,访问\u粗略更新权限未列出 更新: 当
TelephonyManager.getAllCellInfo()
方法。在我的清单文件中,我拥有ACCESS\u rough\u UPDATES
,ACCESS\u rough\u LOCATION
,ACCESS\u FINE\u LOCATION
权限。但是,该方法返回null
以下命令列出了手机上可用的权限:
adb shell pm list permissions -g
在Nexus 4(4.2.2)上,访问\u粗略更新权限未列出
更新:
当查看源代码的主分支时,没有访问\u粗略\u更新的参考,因此这似乎是文档中的错误。事实上,相关代码只需要访问粗略位置和/或访问精细位置
通过以下方式进行跟踪:
- 电话管理员
- 伊泰勒波尼
- 电话接口管理员
- 音标
- 电话工厂
- GsmPhone
- 音基
- ServiceStateTracker
/**
* @return all available cell information or null if none.
*/
public List<CellInfo> getAllCellInfo() {
return null;
}
/**
*@返回所有可用的单元格信息,如果没有,则返回null。
*/
公共列表getAllCellInfo(){
返回null;
}
所以它看起来在所有情况下都会返回null
是指向当前缺陷报告的链接 来自javadoc:
这比使用getCellLocation更可取,尽管对于较旧的设备,这可能返回null,在这种情况下应调用getCellLocation
报告此方法仅在CDMA/LTE设备上实施,其他类型的设备(包括GSM/LTE设备)将返回null。在实现的地方,它将只返回LTE小区
TelephonyManager.getCellLocation()
将仅返回GSM/UMTS或CDMA小区。它仅限于一个单元,即设备当前注册的单元。如果您确信您的代码只在GSM/UMTS或CDMA设备上运行,并且您只对设备当前注册的小区感兴趣,那么这是您最安全的选择
要获取有关其他周围单元格的信息,请使用TelephonyManager.getneightringcellinfo()
。然而,它仅限于GSM/UMTS小区。此外,其实现取决于无线电固件。大多数三星设备(以及其他一些设备)将返回一个空列表
结论:目前在安卓系统上获取附近手机的信息是一件相当麻烦的事情。您可能需要使用这三种方法的组合来获取所需的信息,即使这样,某些内容也可能无法访问。api声明如下:
GetAllCellInfo
比使用getCellLocation
更受欢迎,尽管对于较旧的设备,这可能返回null
,在这种情况下应调用getCellLocation
。我的手机也是Nexus,它不列出访问权限。您认为在Nexus getAllCellInfo()以外的其他4.2版本的手机上可以使用吗?你有没有在其他手机上检查过它?据我所知,这是API中的一个错误,无法获取手机信息?我想知道他们是否有计划修复这个重要的bug?