android - OnePlus One/Two/Three 上的漫游检测

标签 android android-source roaming oneplusone oneplustwo

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

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(), 并不是真正的解决方案,因为它会检测用户是否处于漫游状态而不是在设置中切换。

感谢您的帮助! :)

最佳答案

我找到了关于这个问题的一些解决方案.. 这似乎是由于在这些设备上使用双 SIM 卡造成的,这些设备为此功能采用了较​​新的 API。 (我在 source code of 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. 对于其余设备,您可以使用上面指定的解决方案。

关于android - OnePlus One/Two/Three 上的漫游检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39067910/

相关文章:

Android更改来自另一个 fragment 的 ListView 项目

android - Jquery Mobile 页面在页面转换期间调整大小

java - <= && >= Java/Android 运算符

bash - 命令 "PWD=/proc/self/cwd another_executable "是什么意思?

c# - 在漫游设置中存储复杂数据类型

javascript - 是否可以检测网络应用程序上的 Android 后退按钮?

android-source - 手动将审阅者添加到 AOSP 是否需要更改?

c# - 使用 .Net 持久存储加密数据

android - 在android中2秒后检查设备是否处于漫游状态

android - 如何只下载 AOSP 源代码的工作目录而不下载整个 repo 历史记录?