1

我愿意检测电话上的漫游开关是否已关闭。

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,该设置始终为 false (0)。在我测试过的其他设备上——Nexus 6P、LG G5、三星 S5 都运行良好……

telephonyManager.isNetworkRoaming(),这里并不是真正的解决方案,因为它会检测用户是否处于漫游状态而不是切换设置。

感谢帮助!:)

4

1 回答 1

2

我找到了一些关于这个问题的解决方案。这似乎是由于在这些设备上使用双 SIM 卡引起的,这些设备采用了更新的 API 来实现这个功能。(我在Oxygen 的源代码上找到了它)

  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. 对于其余设备,您可以使用上面指定的解决方案。
于 2016-08-21T22:01:26.257 回答