首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测Android手机上的5G连接

检测Android手机上的5G连接
EN

Stack Overflow用户
提问于 2020-04-07 02:00:20
回答 1查看 1.2K关注 0票数 3

我在试着识别手机连接的类型。我使用了不同的方法,比如建议的here,但我一直在使用4G,结果是在三星的安卓10和5G连接上。如何读取正确的网络类型?

代码语言:javascript
复制
private fun getNetworkType(telephonyManager: TelephonyManager): String {
    return when (telephonyManager.networkType) {
        TelephonyManager.NETWORK_TYPE_UNKNOWN -> "unknown"

        TelephonyManager.NETWORK_TYPE_GPRS,
        TelephonyManager.NETWORK_TYPE_EDGE,
        TelephonyManager.NETWORK_TYPE_CDMA,
        TelephonyManager.NETWORK_TYPE_1xRTT,
        TelephonyManager.NETWORK_TYPE_IDEN,
        TelephonyManager.NETWORK_TYPE_GSM -> "2G"

        TelephonyManager.NETWORK_TYPE_UMTS,
        TelephonyManager.NETWORK_TYPE_EVDO_0,
        TelephonyManager.NETWORK_TYPE_EVDO_A,
        TelephonyManager.NETWORK_TYPE_HSDPA,
        TelephonyManager.NETWORK_TYPE_HSUPA,
        TelephonyManager.NETWORK_TYPE_HSPA,
        TelephonyManager.NETWORK_TYPE_EVDO_B,
        TelephonyManager.NETWORK_TYPE_EHRPD,
        TelephonyManager.NETWORK_TYPE_HSPAP,
        TelephonyManager.NETWORK_TYPE_TD_SCDMA -> "3G"

        TelephonyManager.NETWORK_TYPE_LTE,
        TelephonyManager.NETWORK_TYPE_IWLAN -> "4G"

        TelephonyManager.NETWORK_TYPE_NR -> "5G"

        else -> "something else"
    }
}

private fun getRadioTechnology(telephonyManager: TelephonyManager): String {
    try {
        val obj = Class.forName(telephonyManager.javaClass.name)
                .getDeclaredMethod("getServiceState", *arrayOfNulls(0)).invoke(telephonyManager, *arrayOfNulls(0))
        val methods: Array<Method> = Class.forName(obj.javaClass.name).declaredMethods
        for (method in methods) {
            if (method.name == "getRadioTechnology" ) {
                method.isAccessible = true
                val radioTechnology = (method.invoke(obj) as Int).toInt()
                return "$radioTechnology"
            }
        }
    } catch (e: Exception) {
        Log.e("Test5G", "", e)
    }
    return ""
}

@SuppressLint("MissingPermission")
fun getActiveSubscriptionInfoList(): String {
    val subscriptionInfos = SubscriptionManager.from(this).activeSubscriptionInfoList
    var ret: String = ""
    for(sub in subscriptionInfos) {
        val id = sub.subscriptionId
        val telephonyManager = telephonyManager.createForSubscriptionId(id);
        ret += getRadioTechnology(telephonyManager)
    }
    return ret
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-02 04:05:40

我是这样做的:

代码语言:javascript
复制
telephonyManager.listen(object : PhoneStateListener() {
    override fun onServiceStateChanged(serviceState: ServiceState) {
        val isNrAvailable = serviceState.toString().isNrAvailable()
        // use isNrAvailable
    }
}, PhoneStateListener.LISTEN_SERVICE_STATE)

哪里

代码语言:javascript
复制
fun String.isNrAvailable() =
        contains("nrState=CONNECTED") ||
        contains("nsaState=5"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61066013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档