记录一下获取手机网络类型(4G、5G)和信号强弱(dbm、asu)等的方式

438 阅读1分钟

1、获取4g、5g

@SuppressLint("MissingPermission")
private fun getNetWorkType(): String? {
    val status = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
    if (status != PackageManager.PERMISSION_GRANTED) {
        return null
    }
    val mTelephonyManager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager

    val type = mTelephonyManager.networkType

    if (type == 19) {
        return "4G"
    }

    if (type == TelephonyManager.NETWORK_TYPE_NR) {
        return "5G"
    }

    return null
}

2、获取dbm、asu

@SuppressLint("MissingPermission")
public fun getMobileNetworkSignal() {
    val status = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
    if (status != PackageManager.PERMISSION_GRANTED) {
        return
    }
    val mTelephonyManager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager

    mTelephonyManager.listen(object : PhoneStateListener() {
        @SuppressLint("MissingPermission")
        override fun onSignalStrengthsChanged(signalStrength: SignalStrength) {
            super.onSignalStrengthsChanged(signalStrength)
            val cellInfoList: List<CellInfo> = mTelephonyManager.allCellInfo

           val dbmList = cellInfoList.map {
                when {
                    Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q -> {
                        when (it) {
                            is CellInfoTdscdma -> {
                                Dbm(
                                    it.cellSignalStrength.dbm,
                                    it.cellSignalStrength.asuLevel
                                )
                            }
                            is CellInfoNr -> {
                                Dbm(
                                    it.cellSignalStrength.dbm,
                                    it.cellSignalStrength.asuLevel
                                )
                            }
                            else -> {
                                Dbm(
                                    -1,
                                    -1
                                )
                            }
                        }
                    }
                    it is CellInfoGsm -> {
                        Dbm(
                            it.cellSignalStrength.dbm,
                            it.cellSignalStrength.asuLevel
                        )
                    }
                    it is CellInfoLte -> {
                        Dbm(
                            it.cellSignalStrength.dbm,
                            it.cellSignalStrength.asuLevel
                        )
                    }
                    it is CellInfoCdma -> {
                        Dbm(
                            it.cellSignalStrength.dbm,
                            it.cellSignalStrength.asuLevel
                        )
                    }
                    it is CellInfoWcdma -> {
                        Dbm(
                            it.cellSignalStrength.dbm,
                            it.cellSignalStrength.asuLevel
                        )
                    }
                    else -> {
                        Dbm(
                            -1,
                            -1
                        )
                    }
                }
            }
        }
    }, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)
}