Обнаружение роуминга в OnePlus One/Two/Three
Я хочу определить, выключен ли роуминг на телефоне.
if (Build.VERSION.SDK_INT < 17) {
isDataRoamingDisabled =
(Settings.System.getInt(context.getContentResolver(), Settings.Secure.DATA_ROAMING, 0)
== 0);
} else {
isDataRoamingDisabled =
(Settings.Global.getInt(context.getContentResolver(), Settings.Global.DATA_ROAMING, 0)
== 0);
}
К сожалению, только для OnePlus One/Two/Three настройка всегда ложна (0). На остальных устройствах, которые я тестировал - Nexus 6P, LG G5, Samsung S5 все работает нормально...
telephonyManager.isNetworkRoaming(),
Это не совсем решение, так как он определяет, находится ли пользователь в роуминге и не переключается в настройках.
Спасибо за помощь!:)
1 ответ
Решение
Я нашел какое-то решение по этой проблеме. Похоже, что это вызвано использованием Dual SIM на этих устройствах, которые приняли более новый API для этой функции. (Я нашел это в исходном коде кислорода)
- Это решение требует
READ_PHONE_STATE
разрешение - Доступ к роумингу каждой подписки:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
List<SubscriptionInfo> subscriptions = SubscriptionManager.from(context).getActiveSubscriptionInfoList();
for (SubscriptionInfo subscriptionInfo:subscriptions) {
if (subscriptionInfo.getDataRoaming() == SubscriptionManager.DATA_ROAMING_ENABLE) {
return true;
}
}
return false;
}
- Для остальных устройств вы можете использовать решение, которое вы указали выше.