android - 无法获取相邻小区 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
.
解决方案
推荐阅读
- python - UnicodeDecodeError:“utf-8”编解码器无法解码位置 3362 中的字节 0xd5:无效的继续字节
- java - 仅导入使用 maven 构建的库的一个配置文件
- c - SDL2 CreateTextureFromSurface 减慢
- swift - swift:userDefaults 存储用户名和密码是否安全?
- angular - 使用 Docker 将 Angular2 部署到 Azure 容器实例 - 无法访问应用程序
- asp.net - 将数据从视图传递到控制器 - Surveytype
- android - Flowable 的 onErrorResumeNext、networkOnMainThread 出错
- opengl - Pitch、Yaw、Roll 计算混乱
- java - 连字符 (-) 的不适当 OGNL 表达式
- aurelia - 在 OpenIdConnect 中 getUser 返回 null,即使在接收令牌之后