Я работаю над небольшим приложением, которое получает информацию о текущих и соседних ячейках базовых станций сети.
Я могу получить cell_id моей текущей базовой станции (isRegistered == true
), но для всех остальных я получаюInt.MAXVALUE
Любое решение, как получить идентификаторы соседних ячеек?
Я пробовал другое приложение с кодом 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
.