Android определяет уровень сигнала от Wi-Fi, но не от сотовых сетей - PullRequest
0 голосов
/ 31 января 2020

Я разрабатываю простое приложение на android для определения значений уровня сигнала от сетей Wi-Fi и сотовой (GSM, UMTS, LTE). Получение мощности сигнала Wi-Fi работает хорошо, я получаю некоторые значения, которые меняются, поэтому я предполагаю, что это работает хорошо. Я думал, что добавление сервиса для приема сигналов сотовой связи будет простой копией вставки предыдущего решения, но в этом случае каждая реализованная система ячеек, такая как gsm, umts или lte, показывает мне значение 0. У вас есть какие-либо идеи, где может быть проблема? Какой-то слушатель нужен? Или отсутствие разрешений в манифесте?

Сервисный код Wi-Fi:

class WifiService (private val context: Context) : IMeasureService{

    var dbm = -1

    override fun getMeasuredValue(): Int {
        val service= context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
        try {
            val rssi = service.connectionInfo.rssi
            dbm = rssi
        }catch (e: SecurityException){
            dbm = 0
            Log.d("Wifi", "Wifi")
        }finally {
            return dbm
        }
    }

    override fun getMeasurementType(): String {
        return "WIFI"
    }

Сервис для lte

class LteRsrp (private val context: Context) : IMeasureService{

    var dbm = -1
    @RequiresApi(Build.VERSION_CODES.O)
    override fun getMeasuredValue(): Int {
        val service = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        try {
            val cellInfoLte = service.allCellInfo as CellInfoLte
            val Rsrp = cellInfoLte.cellSignalStrength.rsrp
            dbm = Rsrp
        }catch (e: SecurityException){
            dbm = 0
            Log.d("Lte_rsrp", "Lte_rsrp")
        }finally {
            return dbm
        }
    }

    override fun getMeasurementType(): String {
        return "LTE_RSRP"
    }
...