3

我正在尝试制作一个程序来读取通常的信号电平和其他类似的东西并将其提供给读者,我使用了getAllCellInfo() 虽然它有一些数据,但我想不出一种方法来提取里面的数据以使其变得容易可读。我尝试.toString()了方法,但结果相同

List<CellInfo> cell=  tm.getAllCellInfo();

有没有办法让阅读变得容易?或者有没有更简单的方法来获取这些数据?

我正在寻找 RSSI 和功率相关参数。

4

2 回答 2

2

这是我所做的:

    protected class SignalStrengthListener extends PhoneStateListener {
        @Override
        public void onSignalStrengthsChanged(android.telephony.SignalStrength signalStrength) {

            tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

            ltestr = signalStrength.toString();
            parts = ltestr.split(" ");

            try {
                cellInfoList = tm.getAllCellInfo();
                for (CellInfo cellInfo : cellInfoList) {

                    if (cellInfo instanceof CellInfoLte) {
                        // cast to CellInfoLte and call all the CellInfoLte methods you need
                        // Gets the LTE PCI: (returns Physical Cell Id 0..503, Integer.MAX_VALUE if unknown)

                       cellPci = ((CellInfoLte) cellInfo).getCellIdentity().getPci();
                    }
                }
            } catch (Exception e) {
                Log.d("SignalStrength", "Exception: " + e.getMessage());
            }

            super.onSignalStrengthsChanged(signalStrength);
        }
}

然后我可以打印parts我需要的数组元素。在这里,我得到了 PCI。然后只是为了快速检查打印它Log.d("TAG", "PCI is " + cellPci);并在 logcat 中观察它。

您可以在我的 github 上查看获得 LTE RSRP、RSRQ、PCI 等的应用程序: https ://github.com/parksjg/IndoorLTE3a

于 2017-05-05T16:49:39.530 回答
1

您可以尝试使用 CellInfoLte 、 CellInfoGsm 来获取 Dbm 、 AsuLevel 、 Level ..etc

 List<CellInfo> cellInfos=tel.getAllCellInfo();


       for (CellInfo varcell:cellInfos){

           if (varcell instanceof CellInfoLte){

                CellInfoLte cellInfoLte=(CellInfoLte)varcell;

               CellSignalStrengthLte cellSignalStrengthLte=(CellSignalStrengthLte)cellInfoLte.getCellSignalStrength();

              int Dbm= cellSignalStrengthLte.getDbm();
              int Asu= cellSignalStrengthLte.getAsuLevel();
               int Level= cellSignalStrengthLte.getLevel();


               int vci=cellInfoLte.getCellIdentity().getCi();
于 2016-01-20T03:15:15.140 回答