我看到我们有针对 CDMACellLocation 和 GSMCellLocation 的类,但没有针对 LTE 的特定内容。我可以获得特定于我的电话服务环境的 LTE 小区位置吗?谢谢!
问问题
7097 次
3 回答
2
您可以从 LTE 连接获取信息,并对属于 CellInfo 列表的实例进行特定转换。
MobileInfoRecognizer mobileInfoRecognizer = new MobileInfoRecognizer();
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
List<CellInfo> cellInfos = tm.getAllCellInfo();
additional_info = mobileInfoRecognizer.getCellInfo(cellInfos.get(0));
在我的应用程序中,我注意到您只能获取列表中的第一个元素;我向您展示我的自定义课程:
public class MobileInfoRecognizer {
public String getCellInfo(CellInfo cellInfo) {
String additional_info;
if (cellInfo instanceof CellInfoGsm) {
CellInfoGsm cellInfoGsm = (CellInfoGsm) cellInfo;
CellIdentityGsm cellIdentityGsm = cellInfoGsm.getCellIdentity();
additional_info = "cell identity " + cellIdentityGsm.getCid() + "\n"
+ "Mobile country code " + cellIdentityGsm.getMcc() + "\n"
+ "Mobile network code " + cellIdentityGsm.getMnc() + "\n"
+ "local area " + cellIdentityGsm.getLac() + "\n";
} else if (cellInfo instanceof CellInfoLte) {
CellInfoLte cellInfoLte = (CellInfoLte) cellInfo;
CellIdentityLte cellIdentityLte = cellInfoLte.getCellIdentity();
additional_info = "cell identity " + cellIdentityLte.getCi() + "\n"
+ "Mobile country code " + cellIdentityLte.getMcc() + "\n"
+ "Mobile network code " + cellIdentityLte.getMnc() + "\n"
+ "physical cell " + cellIdentityLte.getPci() + "\n"
+ "Tracking area code " + cellIdentityLte.getTac() + "\n";
} else if (cellInfo instanceof CellInfoWcdma){
CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) cellInfo;
CellIdentityWcdma cellIdentityWcdma = cellInfoWcdma.getCellIdentity();
additional_info = "cell identity " + cellIdentityWcdma.getCid() + "\n"
+ "Mobile country code " + cellIdentityWcdma.getMcc() + "\n"
+ "Mobile network code " + cellIdentityWcdma.getMnc() + "\n"
+ "local area " + cellIdentityWcdma.getLac() + "\n";
}
return additional_info;
}
}
因此,如果被测设备不支持 LTE,您始终可以获取有关其连接的其他相关信息。希望你能发现它有用。
于 2016-03-09T22:03:35.870 回答
0
这里要小心——尽管 API 可能会提供单元信息的接口,但它确实取决于运营商。与可以提供课程位置信息作为其 RADIUS 输出的一部分的 CDMA 不同,LTE 因实施而异。只有 LTE 网络的“较低”级别知道您可能在哪里,而且这充其量是模糊的。在不了解您的运营商的基础设施、他们的 MME 工作方式等情况下,您可能会获得信息,但我不相信它可以获得地理位置信息。
此外,这取决于您的运营商如何轮询。根据设备配置文件,您可能会被轮询一次、每五分钟一次、每两小时一次。如果你在漫游,你可能只会得到垃圾,因为没有很好的价值观标准。
于 2013-05-15T02:41:21.830 回答
-2
您可以遍历 getAllCellInfo () 返回的列表 List 并检查 CellInfo 是否为 CellInfoLte
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
List<CellInfo> cellInfoList = tm.getAllCellInfo();
for (CellInfo cellInfo : cellInfoList)
{
if (cellInfo instanceof CellInfoLte)
{
// cast to CellInfoLte and call all the CellInfoLte methods you need
}
}
于 2013-04-29T22:41:00.597 回答