Обнаружение роуминга в 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 для этой функции. (Я нашел это в исходном коде кислорода)

  1. Это решение требует READ_PHONE_STATE разрешение
  2. Доступ к роумингу каждой подписки:
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;
}
  1. Для остальных устройств вы можете использовать решение, которое вы указали выше.
Другие вопросы по тегам