Как получить точную мощность сигнала в приложении Android? - PullRequest
0 голосов
/ 18 мая 2019

Я использую CellInfo для захвата мощности сигнала и ARFCN / UARFCN / EARFCN каждую секунду.

Но, думаю, это не очень точно.Это всегда хуже -5 ~ -10 дБм, чем уровень сигнала, отображаемый в настройках телефона.Иногда я также получаю 0 или целое число. MAX_VALUE.Является ли мой код проблемой или есть какой-либо другой способ получить реальную мощность сигнала?

var cellInfoList: List<CellInfo> = mTelephonyManager.allCellInfo
if (cellInfoList.isNotEmpty()) {
    for (cellInfo in cellInfoList) {
        if (cellInfo is CellInfoLte) {
            val cellSignalStrengthLte = cellInfo.cellSignalStrength
            val cellIdentityLte = cellInfo.cellIdentity
            var arfcn = cellIdentityLte.earfcn
            intSignalStrength = cellSignalStrengthLte.dbm
            networkStatus = "${Integer.toString(intSignalStrength)} dBm | $arfcn"
        } else if (cellInfo is CellInfoGsm) {
            val cellSignalStrengthGsm = cellInfo.cellSignalStrength
            val cellIdentityGsm = cellInfo.cellIdentity
            var arfcn = cellIdentityGsm.arfcn
            intSignalStrength = cellSignalStrengthGsm.dbm
            networkStatus = "${Integer.toString(intSignalStrength)} dBm | $arfcn"
        } else if (cellInfo is CellInfoWcdma) {
            val cellSignalStrengthWcdma = cellInfo.cellSignalStrength
            val cellIdentityWcdma = cellInfo.cellIdentity
            var arfcn = uarfcnToBand(cellIdentityWcdma.uarfcn)
            intSignalStrength = cellSignalStrengthWcdma.dbm
            networkStatus = "${Integer.toString(intSignalStrength)} dBm | $arfcn"
        } else if (cellInfo is CellInfoCdma) {
            val cellSignalStrengthCdma = cellInfo.cellSignalStrength
            intSignalStrength = cellSignalStrengthCdma.dbm
            networkStatus = "${Integer.toString(intSignalStrength)} dBm"
        }
    }
}

1 Ответ

0 голосов
/ 24 мая 2019

Я получил решение.Проблема в за цикл.Последний уровень сигнала в первом цикле, поэтому следующий цикл будет охватывать нужный мне результат.

...