как захватить параметры сети, такие как RSRP, SINR и т. д. для 5G в android. Могу ли я получить одновременно параметры LTE и 5G в режиме NSA?

Как работает двойной режим в android для 5G. Как API Android поддерживают эту функцию. Мне интересно, будем ли мы получать параметры сети LTE и 5G одновременно через разные API? Пожалуйста, помогите, если у кого-то есть ясность по этому поводу.

1 ответ

Существуют различные API-интерфейсы Android для получения радиочастотных параметров 4G и 5G (RSRP, RSRQ и SINR). Вы можете использовать CellSignalStrengthLte для получения радиочастотных параметров 4G, тогда как для 5G используйте CellSignalStrengthNr . Вот моя реализация этих библиотек. Вы можете использовать следующий код для вызова функции nrSignalStrengthInfo, которая возвращает параметры RF.

       try {
                if(Build.VERSION.SDK_INT >= 29){
                    val tm: TelephonyManager =
                        context.getSystemService(AppCompatActivity.TELEPHONY_SERVICE) as TelephonyManager
                    if (tm.signalStrength != null){
                        Log.i(TAG,"nrSignalStrengthInfo executed")
                        nrSignalStrengthInfo(tm.signalStrength)
                    }
                }
        }catch (e: Exception){
            Log.e(TAG,e.stackTraceToString())               
        }

Это функция nrSignalStrengthInfo, которую вы будете вызывать.

      private fun nrSignalStrengthInfo(signalStrength: SignalStrength?){
        if (Build.VERSION.SDK_INT >= 29){
            if (signalStrength != null) {
                val lteSS = signalStrength.getCellSignalStrengths(CellSignalStrengthLte::class.java)
                val nrSS = signalStrength.getCellSignalStrengths(CellSignalStrengthNr::class.java)
                if (nrSS.isNotEmpty() && lteSS.isNotEmpty()) {
                    this.nrType = "NR_5G_NSA"
                } else if (nrSS.isNotEmpty() && lteSS.isEmpty()) {
                    this.nrType = "NR_5G_SA"
                }else{
                    this.nrType = ""
                    Log.i(TAG,"nrSS not available")
                }
                if (nrSS.isNotEmpty()) {
                    rsrp5g = nrSS[0].ssRsrp.toLong()
                    rsrq5g = nrSS[0].ssRsrq.toLong()
                    sinr5g = nrSS[0].ssSinr.toLong()
                    csiSinr = nrSS[0].csiSinr.toLong()
                }else{
                    if(lteSS.isNotEmpty()){
                        rsrp = lteSS[0].rsrp.toDouble()
                        rsrq = lteSS[0].rsrq.toDouble()

                    }else{
                        rsrp = (-160).toDouble()
                        rsrq = (-30).toDouble()
                    }
                    rsrp5g = -160
                    rsrq5g = -30
                    sinr5g = -30
                    csiSinr = -30
                    pci5g = -1
                    bandsNr = "NA"
                }
            }
        }
    }

Надеюсь это поможет!!

Другие вопросы по тегам