Определение типа сети на двухсимочном телефоне
Я пытаюсь получить информацию о типе сети в двухсимочном телефоне для каждого слота. Использую SubscriptionManager для получения подписок и TelephonyManager для работы с данными подписки следующим образом:
SubscriptionManager sm = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
for (SubscriptionInfo info : sm.getActiveSubscriptionInfoList()) {
setData(getNetworkClass(tm.createForSubscriptionId(info.getSubscriptionId()).getDataNetworkType()));
}
Метод setData просто передает строку, getNetworkClass мапит код сети с ее названием:
private String getNetworkClass(int networkType) {
switch (networkType) {
case TelephonyManager.NETWORK_TYPE_GSM:
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
return "2G";
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_EHRPD:
case TelephonyManager.NETWORK_TYPE_HSPAP:
return "3G";
case TelephonyManager.NETWORK_TYPE_LTE:
return "4G";
case TelephonyManager.NETWORK_TYPE_NR:
return "5G";
default:
return "Unknown";
}
}
Все работает отлично для текущей активной симкарты, правильно определяется любая сеть, в которой она находится. Вторая симкарта либо возвращает код сети 4G, либо код неизвестной сети, если находится не в 4G. Как сделать так, чтобы другая симкарта, на которой не выбрана как симкарта для интернета, корректно возвращала тип сети?