3

手机显示 5G,但phoneManager.getDataNetworkType是 LTE。在设置中,sim卡状态显示移动语音网络类型(翻译成中文,可能不正确)是NR NSA(非独立),但移动数据网络类型(翻译成中文)是LTE。

那么,如何判断 5G NSA 还是 SA(独立)?

我是Android新手,我英语不好,hhhh ...谢谢。这是我在 Stackoverflow 中的第一个问题。

4

2 回答 2

2

如果您可能拥有 Android 11 设备,请参阅: https ://source.android.com/devices/tech/connect/acts-5g-testing https://developer.android.com/about/versions/11 /features/5g#检测

emulator30.0.22 起,它还将支持伪造 5G 网络连接: https ://developer.android.com/about/versions/11/behavior-changes-all#emulator-5g


TelephonyManager并且TelephonyDisplayInfo都是正确检测所必需的:

SL4A 使用以下值来区分 5G 的 NSA(非独立)、mmWave(毫米波)和 SA(独立)连接类型:

Type Values
5G NSA TelephonyManager.getDataNetworkType() = LTE
TelephonyDisplayInfo.getNetworkType() = LTE
TelephonyDisplayInfo.getOverrideNetworkType() = NR_NSA
5G mmWaveTelephonyDisplayInfo.getOverrideNetworkType() = NR_MMWAVE
5G SA TelephonyManager.getDataNetworkType() = NR
TelephonyDisplayInfo.getNetworkType() = NR

TelephonyDisplayInfo.getOverrideNetworkType()可用于区分 4G LTE 和 5G NSA。虽然在大多数领域,Android 11emulator可能是实际测试这一点的最佳机会。

于 2021-04-12T14:23:28.650 回答
1

不幸的是,在这些情况下,您不能依赖 API。我发现的唯一方法是注册一个侦听器以ServiceState从 TelephonyManager 获取,然后解析结果serviceState.toString()

telephonyManager.listen(object : PhoneStateListener() {
    override fun onServiceStateChanged(state: ServiceState) {
        val serviceState = state.toString()
        val nr = serviceState.isNrAvailable()
        ...
    }
}, PhoneStateListener.LISTEN_SERVICE_STATE)
fun String.isNrAvailable() =
        contains("nrState=CONNECTED") ||
        contains("nsaState=5"))

这给了你时代的正确答案most。BTWNR NSA是 NR 非独立的正确名称。

如果要区分 NRSA 和 NRNSA,则需要从 TelephonyManager 获取所有 cellInfo

telephonyManager.allCellInfo 

检查主小区是否为NR。

cellInfo.cellConnectionStatus

在某些情况下,您会看到没有 NR 单元。在这种情况下,您可以确定连接是 NRNSA(假设它是 5G)。在其他情况下,会有 NR 小区,但它们不会被报告为主小区。即使使用了 NR 小区,设备甚至可能会将其报告为根本未连接。同样在这种情况下,您知道它是 NRNSA。即使通过检查强度报告为未连接,您也可能检测到使用的 NR 小区。

cellInfo.cellSignalStrength.dbm

您将看到报告的强度与具有最高 SS-RSRP(同步信号参考信号接收功率)的 NR 小区的强度相同

我会避免使用,TelephonyDisplayInfo因为它不可靠。这些值显示给用户,他们遵循运营商政策或品牌偏好。

于 2021-04-12T11:46:52.490 回答