如何获得Android中的LTE单元位置?

时间:2013-04-25 21:05:08

标签: android lte

我看到我们有CDMACellLocation和GSMCellLocation的类,但没有什么特定的LTE。我可以获取特定于我的电话服务上下文的LTE小区位置吗? 谢谢!

3 个答案:

答案 0 :(得分: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,您始终可以获得有关其连接的其他相关信息。希望你能发现它很有用。

答案 1 :(得分:0)

这里要小心 - 虽然API可能提供单元信息的接口,但它实际上取决于运营商。与可以提供课程位置信息作为其RADIUS输出的一部分的CDMA不同,LTE因实施而异。只有LTE网络的“较低”级别知道您可能在哪里,而且最多只是模糊。如果不了解运营商的基础设施,MME的工作方式等,您可能会获得信息,但我不相信地理位置信息。

此外,这取决于您的运营商如何进行民意调查。根据设备配置文件,您可能每分钟一次,每五分钟一次,每两小时一次。如果你正在漫游,你可能只得到垃圾,因为没有很好的标准值。

答案 2 :(得分:-1)

您可以遍历getAllCellInfo()返回的列表List,并通过

检查CellInfo是否为Cel​​lInfoLte
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
    }
}