当前位置: 首页 > 知识库问答 >
问题:

如何从getAllCellInfo获取邻居小区信息?

史修明
2023-03-14

这是我用来检测更改的电话状态侦听器

public PhoneStateListener mPhoneStateListener = new PhoneStateListener() {


        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
            Log.d("SIGNAL ", "  " + signalStrength.toString());
            TelephonyManager tm = (TelephonyManager) mContext.getSystemService(mContext.TELEPHONY_SERVICE);
            List<CellInfo> cellInfos = tm.getAllCellInfo();
            for (int i=0 ;i<cellInfos.size() ;i++)
            {
                Log.d("test ",cellInfos.get(0).toString() );
            }
        }
    };

问题是目前我获取的所有手机信息如下:

结果-

我如何解析它以从上述结果中获得CellInfoLte、CellIdentityLte和CellSignalStrengthLte

共有2个答案

卢阳泽
2023-03-14

试试这个(根据cocorico的说法):

String ssignal = signalStrength.toString();
String[] parts = ssignal.split(" ");

这是一种力量。toString()来自信号强度。

parts[]数组将包含以下元素:

part[0] = "Signalstrength:"  _ignore this, it's just the title_
parts[1] = GsmSignalStrength
parts[2] = GsmBitErrorRate
parts[3] = CdmaDbm
parts[4] = CdmaEcio
parts[5] = EvdoDbm
parts[6] = EvdoEcio
parts[7] = EvdoSnr
parts[8] = LteSignalStrength
parts[9] = LteRsrp
parts[10] = LteRsrq
parts[11] = LteRssnr
parts[12] = LteCqi
parts[13] = gsm|lte|cdma
parts[14] = _not really sure what this number is_

因此,LTEdBm是:

TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
int dbm = 0;

if ( tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_LTE){
    // For Lte SignalStrength: dbm = ASU - 140.
    dbm = Integer.parseInt(parts[8])-140;
} else {
    // For GSM Signal Strength: dbm =  (2*ASU)-113.
    if (signalStrength.getGsmSignalStrength() != 99) {
        int intdbm = -113 + 2
                        * signalStrength.getGsmSignalStrength();
        dbm = Integer.toString(intdbm);
    }
}
翟曦之
2023-03-14

如果您仍在努力解决此问题,我将使用以下方法:

//permission check
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
        ActivityCompat.requestPermissions((Activity)this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},1);

    String list = "";  //I'm just adding everything to a string to display, but you can do whatever

    //get cell info
    TelephonyManager tel = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
    List<CellInfo> infos = tel.getAllCellInfo();
    for (int i = 0; i<infos.size(); ++i) 
        {
            try {
                CellInfo info = infos.get(i);
                if (info instanceof CellInfoGsm) //if GSM connection
                {
                    list += "Site_"+i + "\r\n";
                    list += "Registered: " + info.isRegistered() + "\r\n";
                    CellSignalStrengthGsm gsm = ((CellInfoGsm) info).getCellSignalStrength();
                    CellIdentityGsm identityGsm = ((CellInfoGsm) info).getCellIdentity();
                    list += "cellID: "+ identityGsm.getCid() + "\r\n";
                    list += "dBm: " + gsm.getDbm() + "\r\n\r\n";
                    //call whatever you want from gsm / identitydGsm
                }
                else if (info instanceof CellInfoLte)  //if LTE connection
                {
                    list += "Site_"+i + "\r\n";
                    list += "Registered: " + info.isRegistered() + "\r\n";
                    CellSignalStrengthLte lte = ((CellInfoLte) info).getCellSignalStrength();
                    CellIdentityLte identityLte = ((CellInfoLte) info).getCellIdentity();
                    //call whatever you want from lte / identityLte
                }
                else if (info instanceof CellInfoWcdma)  //if wcdma connection
                {
                    CellSignalStrengthWcdma wcdmaS = ((CellInfoWcdma) info).getCellSignalStrength();
                    CellIdentityWcdma wcdmaid = ((CellInfoWcdma)info).getCellIdentity();
                    list += "Site_"+i + "\r\n";
                    list += "Registered: " + info.isRegistered() + "\r\n";
                    //call whatever you want from wcdmaS / wcdmaid

                }

            } catch (Exception ex) {
                Log.i("neighboring error 2: " ,ex.getMessage());
            }
        }
    Log.i("Info display", list);  //display everything.

当我们忙的时候,只是提醒一下,LTE解析是非常糟糕的(你会看到你是否做了getCi(),getTac()等等),所以我写了我自己的解析类,并在这里发布了我的答案。

不过,值得注意的是,当你开始看到你的邻近小区信息完全错误时...(我目前面临的问题),这个困境也贴在这里。祝你好运,如果这部分对你来说不是问题,请告诉我

 类似资料:
  • 问题内容: 假设我在Redis中有这些对: 键始终是十进制数字。当提供一个数字时,我想在两个方向上获得最接近数字的两个键。 例如,如果我搜索的邻居,则结果集应具有: 这可能吗?我还是Redis的新手,感谢您的帮助。 问题答案: 是和不是同一时间。 为什么是? 唯一的redis数据类型-SORTED SET允许您获取基于十进制的值范围。因此,使用ZRANGEBYSCORE,您可以按分数范围获取值。

  • 问题内容: 我正在编写一个在x86-32和x86-64 Linux中使用和进行反汇编的工具。问题是,尽管我能够分解libopcode,但无法获得任何指令信息。为了演示起见,我举了一个最小的例子来重现我的问题。该程序应从入口点反汇编到第一个/ 。 该代码有点被全局变量所破坏,为简洁起见,省略了错误检查等,但是应该清楚地说明问题。 可以使用以下内容构建此源。要执行成功的链接,需要将该软件包安装在本地计

  • 本文向大家介绍微信小程序wx.getImageInfo()如何获取图片信息,包括了微信小程序wx.getImageInfo()如何获取图片信息的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 一.知识点 二.列子 (1).加载时 (2).上传图片时 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊

  • 除了获取客户端的地区信息外,有时他们所在的时区信息也非常有用。LocaleContextResolver接口为LocaleResolver提供了拓展点,允许解析器在LocaleContext中提供更多的信息,这里面就可以包含时区信息。 如果用户的时区信息能被解析到,那么你总可以通过RequestContext.getTimeZone()方法获得。时区信息会自动被SpringConversionSe

  • 是否可以使用邻居缓存中的链接地址从udp客户端节点向邻居发送自定义数据包?我正在寻找一种避免发送icmpv6数据包的方法,因为它将到达根目录,然后根目录将其发送到目标目录。我看到Contiki启用了mesh拓扑,所以应该可以直接向邻居发送数据包,而无需将数据包转发给父级。我将非常感谢您在这方面的任何帮助!

  • 我在UserProfile中添加自定义字段UserType作为字符串。我想更改我的获取值,并将该值传递到TempData中。 这是我在AccountController上的代码: 我对该方法进行了调试,以下是我掌握的信息: 有人对此有什么解决办法吗?我是ASP. NET的新手,但也许如果我实现自定义成员资格,它会工作,你觉得呢?你能给我一些例子吗?谢谢你们。 解决方案如下: `[HttpPost]