在我的 Android 应用程序中检测 5G NR (SA/NSA)

2024-04-30

我正在尝试检测 5G 网络。我使用电话管理器来获取网络类型 https://developer.android.com/reference/android/telephony/TelephonyManager#getNetworkType()。即使我处于 5G 网络覆盖范围内并且手机显示 5G,我也不会收到 NETWORK_TYPE_NR。 NETWORK_TYPE 始终为 13,即 LTE。 Phones Engineering 服务模式显示 NR 相关数据。 有没有办法检测NR(独立或非独立)模式?

我还需要获取 NR 数据的小区信息。我用telephonyManager.getAllCellinfo() https://developer.android.com/reference/android/telephony/TelephonyManager#getAllCellInfo(),但我从来没有得到过一个实例细胞信息 https://developer.android.com/reference/android/telephony/CellInfoNr.

任何帮助表示赞赏。谢谢


几周前我遇到了同样的问题。就我而言,我想在 Galaxy S20-5G 上检测 5G 网络,但getDataNetworkType()总是返回 13NETWORK_TYPE_LTE。 继netmonster 核心 https://github.com/mroczis/netmonster-core策略,这是我从它们中提取来解决我的问题的代码。

public boolean isNRConnected(TelephonyManager telephonyManager) {
    try {
        Object obj = Class.forName(telephonyManager.getClass().getName())
                .getDeclaredMethod("getServiceState", new Class[0]).invoke(telephonyManager, new Object[0]);
        // try extracting from string
        String serviceState = obj.toString();
        boolean is5gActive = serviceState.contains("nrState=CONNECTED") ||
                serviceState.contains("nsaState=5") ||
                (serviceState.contains("EnDc=true") &&
                        serviceState.contains("5G Allocated=true"));
        if (is5gActive) {
            return true;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

这是完整的探测器类netmonster 核心 https://github.com/mroczis/netmonster-core: (DetectorLteAdvancedNrServiceState.kt https://github.com/mroczis/netmonster-core/blob/master/library/src/main/java/cz/mroczis/netmonster/core/feature/detect/DetectorLteAdvancedNrServiceState.kt#L69)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在我的 Android 应用程序中检测 5G NR (SA/NSA) 的相关文章

随机推荐