首页 > 解决方案 > 无法获取相邻小区 ID(android)

问题描述

我正在开发一个小型应用程序,该应用程序可以获取有关当前和相邻网络基站单元的信息。

我可以得到我当前基站的 cell_id( isRegistered == true),但对于所有其他人我得到Int.MAXVALUE

任何解决方案如何获取相邻单元格 ID?

我用 Java 代码尝试了另一个应用程序,但结果是一样的。除了电话管理器之外,没有其他方法可以获取有关网络的信息,我现在不知道该怎么做。

        val tel = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        val infos = tel.allCellInfo

        for (i in infos.indices) {


            try {
                val info = infos[i]
                if (info is CellInfoGsm)
                //if GSM connection
                {
                    val identityGsm = info.cellIdentity
                    if(identityGsm.cid != Int.MAX_VALUE && identityGsm.cid != Int.MAX_VALUE)
                        cellId = identityGsm.cid

                    val gsm = info.cellSignalStrength

                    if(gsm.asuLevel != Int.MAX_VALUE)
                        asuLevel = gsm.asuLevel

                    if(gsm.dbm != Int.MAX_VALUE)
                        dbm = gsm.dbm

                    if(gsm.level != Int.MAX_VALUE)
                        level = gsm.level

                    if(gsm.timingAdvance != Int.MAX_VALUE)
                        timingAdvance = gsm.timingAdvance

                    technogy = "gsm"

                } else if (info is CellInfoLte)
                //if LTE connection
                {
                    val identityLte = info.cellIdentity

                    identityLte.pci
                    if(identityLte.ci != Int.MAX_VALUE)
                        cellId = identityLte.ci

                    val lte = info.cellSignalStrength

                    if(lte.asuLevel != Int.MAX_VALUE)
                        asuLevel = lte.asuLevel

                    if(lte.dbm != Int.MAX_VALUE)
                        dbm = lte.dbm

                    if(lte.level != Int.MAX_VALUE)
                        level = lte.level

                    if(lte.timingAdvance != Int.MAX_VALUE )
                        timingAdvance = lte.timingAdvance


                    //LTE stuff
                    if(lte.rsrp != Int.MAX_VALUE)
                        rsrp = lte.rsrp

                    if(lte.rsrq != Int.MAX_VALUE)
                        rsrq = lte.rsrq

                    if(lte.rssnr != Int.MAX_VALUE)
                        rssnr = lte.rssnr

                    technogy = "lte"
                    //call whatever you want from lte / identityLte
                } else if (info is CellInfoWcdma)
                //if WCDMA connection
                {
                    val identityWcdma = info.cellIdentity
                    if(identityWcdma.cid != Int.MAX_VALUE)
                        cellId = identityWcdma.cid

                    val wcdma = info.cellSignalStrength

                    if(wcdma.asuLevel != Int.MAX_VALUE)
                        asuLevel = wcdma.asuLevel

                    if(wcdma.dbm != Int.MAX_VALUE)
                        dbm = wcdma.dbm

                    if(wcdma.level != Int.MAX_VALUE)
                        level = wcdma.level

                    technogy = "wcdma"

                }


                if(cellId != Int.MAX_VALUE){
                    if (info.isRegistered) { //spI'm connected to this cell
                        networkCellInfo.CellId = cellId.toString()
                    }

                    var neighbor = NeighbourCellInfo()
                    neighbor.RSRQ = rsrq
                    neighbor.RSRP = rsrp
                    neighbor.RSSNR = rssnr
                    neighbor.AsuLevel = asuLevel
                    neighbor.Dbm = dbm
                    neighbor.Level = level
                    neighbor.CellId = cellId
                    neighbor.Technology = technogy

                    neihgbors += neighbor

                }
            } catch (ex: Exception) {
                Log.d(TAG + " cells:", ex.message)
            }

        }

我们得到每个单元格的单元格标识和强度值,我们只需要得到cell_id.

标签: androidkotlinnetwork-programmingcellid

解决方案


推荐阅读