6

我看到我们有针对 CDMACellLocation 和 GSMCellLocation 的类,但没有针对 LTE 的特定内容。我可以获得特定于我的电话服务环境的 LTE 小区位置吗?谢谢!

4

3 回答 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 回答