mkd*_*156 8 android telephonymanager
我的Android版本是4.2.1,我正在尝试使用TelephonyManager.getAllCellInfo()方法.在我的清单文件我有ACCESS_COARSE_UPDATES,ACCESS_COARSE_LOCATION,ACCESS_FINE_LOCATION权限.但是该方法返回null.
来自TelephonyManager.getAllCellInfo()javadoc:
这比使用getCellLocation更受欢迎,但对于旧设备,这可能会返回null,在这种情况下应该调用getCellLocation.
一些消息来源报告说,这种方法仅在CDMA/LTE设备上实现,其他类型的设备(包括GSM/LTE设备)将返回null.在实施的情况下,它将仅返回LTE小区.
TelephonyManager.getCellLocation()将仅返回GSM/UMTS或CDMA小区.它仅限于一个单元,即设备当前注册的单元.如果您确定您的代码仅在GSM/UMTS或CDMA设备上运行,并且您只对设备当前注册的单元感兴趣,这是您最安全的选择.
要获取有关其他周围单元格的信息,请使用TelephonyManager.getNeighboringCellInfo().但是,它仅限于GSM/UMTS小区.此外,它的实现取决于无线电固件.大多数三星设备(以及其他一些设备)将返回一个空列表.
结论:在Android上获取有关附近单元格的信息是非常混乱的.您可能需要使用所有三种方法的组合来获取所需的信息,即使这样,某些事情也可能无法访问.
以下命令列出了电话上可用的权限:
adb shell pm list permissions -g
Run Code Online (Sandbox Code Playgroud)
在Nexus 4(4.2.2)上未列出ACCESS_COARSE_UPDATES权限.
更新:
当查看源代码的主分支时,没有对ACCESS_COARSE_UPDATES的引用,因此这在文档中似乎是错误的.实际上,相关代码仅需要ACCESS_COARSE_LOCATION和/或ACCESS_FINE_LOCATION.
追踪以下内容:
在ServiceStateTracker中:
/**
* @return all available cell information or null if none.
*/
public List<CellInfo> getAllCellInfo() {
return null;
}
Run Code Online (Sandbox Code Playgroud)
所以看起来在所有情况下它都会返回null.
以下是当前缺陷报告的链接.
| 归档时间: |
|
| 查看次数: |
10140 次 |
| 最近记录: |