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

Aks*_*ule 5 android telephonymanager cellinfo 5g

我正在尝试检测 5G 网络。我使用电话管理器来获取NETWORK_TYPE。即使我在 5G 网络覆盖中并且我的手机显示 5G,我也没有得到 NETWORK_TYPE_NR。NETWORK_TYPE 始终为 13,即 LTE。Phones Engineering 服务模式显示 NR 相关数据。有没有办法检测 NR(独立或非独立)模式?

我还需要获取 NR 数据的单元信息。我使用telephonyManager.getAllCellinfo(),但我从未得到过cellinfonr的实例。

任何帮助表示赞赏。谢谢

Sop*_*oun 7

几周前我遇到了同样的问题。就我而言,我想在 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;
}
Run Code Online (Sandbox Code Playgroud)

这是来自netmonster-core 的完整检测器类:(DetectorLteAdvancedNrServiceState.kt

  • 因此,经过大量测试后,我发现我们只能在 NR-SA 设备上获得“Cellinfonr”对象,而不能在 NR-NSA 设备上获得“Cellinfonr”对象。在 NR-NSA 设备上,我们可以使用上述答案检测 5G,并可以从“CellSignalStrengthNr”api 获取 NR 信号信息。 (3认同)
  • @HashimAli 使用 telephonyManager.getSignalStrength(); (2认同)