手机显示 5G,但phoneManager.getDataNetworkType是 LTE。在设置中,sim卡状态显示移动语音网络类型(翻译成中文,可能不正确)是NR NSA(非独立),但移动数据网络类型(翻译成中文)是LTE。
那么,如何判断 5G NSA 还是 SA(独立)?
我是Android新手,我英语不好,hhhh ...谢谢。这是我在 Stackoverflow 中的第一个问题。
手机显示 5G,但phoneManager.getDataNetworkType是 LTE。在设置中,sim卡状态显示移动语音网络类型(翻译成中文,可能不正确)是NR NSA(非独立),但移动数据网络类型(翻译成中文)是LTE。
那么,如何判断 5G NSA 还是 SA(独立)?
我是Android新手,我英语不好,hhhh ...谢谢。这是我在 Stackoverflow 中的第一个问题。
如果您可能拥有 Android 11 设备,请参阅: https ://source.android.com/devices/tech/connect/acts-5g-testing https://developer.android.com/about/versions/11 /features/5g#检测
自emulator
30.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 mmWave
TelephonyDisplayInfo.getOverrideNetworkType() = NR_MMWAVE
5G SA
TelephonyManager.getDataNetworkType() = NR
TelephonyDisplayInfo.getNetworkType() = NR
TelephonyDisplayInfo.getOverrideNetworkType()
可用于区分 4G LTE 和 5G NSA。虽然在大多数领域,Android 11emulator
可能是实际测试这一点的最佳机会。
不幸的是,在这些情况下,您不能依赖 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
因为它不可靠。这些值显示给用户,他们遵循运营商政策或品牌偏好。