Обнаружить 5G NR (SA/NSA) в моем приложении для Android

Я пытаюсь обнаружить сеть 5G. Я использую диспетчер телефонии, чтобы получить NETWORK_TYPE. Даже если я нахожусь в зоне действия сети 5G, а мой телефон показывает 5G, я не получаю NETWORK_TYPE_NR. NETWORK_TYPE всегда 13, то есть LTE. В сервисном режиме Phones Engineering отображаются данные, относящиеся к NR. Есть ли способ определить режим NR (автономный или автономный)?

Мне также нужно получить информацию о ячейке для данных NR. Я использую telephonyManager.getAllCellinfo (), но никогда не получаю экземпляр cellinfonr.

Любая помощь приветствуется. Спасибо

1 ответ

Несколько недель назад я столкнулся с той же проблемой. В моем случае я хочу обнаружить сеть 5G на Galaxy S20-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)

Другие вопросы по тегам