在我的安卓应用中检测5G NR (SA/NSA)

6
我正在尝试检测5G网络。我使用电话管理器获取NETWORK_TYPE。即使我在5G网络覆盖范围内,我的手机显示为5G,但我无法获取NETWORK_TYPE_NR。NETWORK_TYPE始终为13,即LTE。
手机的工程服务模式显示了NR相关数据。是否有办法检测NR(独立或非独立)模式?
我还需要获取NR数据的小区信息。我使用telephonyManager.getAllCellinfo(),但我从未获得cellinfonr的实例。
感谢任何帮助。谢谢。
1个回答

8

我几周前也遇到了同样的问题。在我的情况下,我想检测Galaxy S20-5G上的5G网络,但getDataNetworkType()始终返回13 NETWORK_TYPE_LTE。 根据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-core 的完整检测器类: (DetectorLteAdvancedNrServiceState.kt)


@Sophoun 感谢您的回答。这可以检测我是否在5G网络上,但是有没有什么方法可以获取“cellinfonr”对象呢?即使我在5G覆盖范围内,GetallCellinfo() API也不会返回nr详细信息。 - Akshay Chougule
3
经过大量测试后,我发现我们只在NR-SA设备上获取“Cellinfonr”对象,而在NR-NSA设备上无法获取。在NR-NSA设备上,我们可以使用上述方法检测5G,并从“CellSignalStrengthNr”api获取NR信号信息。 - Akshay Chougule
@AkshayChougule,你能否分享一些代码,以便了解如何获取CellSignalStrengthNr,因为当设备处于NR-NSA时,TelephonyManager返回CellInfoLTE实例。 - Hashim Ali
2
使用 telephonyManager.getSignalStrength(); - Akshay Chougule
NR状态现在在Android 12中被屏蔽。 - Android

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接