OnePlus 上的漫游检测 One/Two/Three
Roaming detection on 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、三星 S5 都运行良好...
telephonyManager.isNetworkRoaming(),
并不是真正的解决方案,因为它会检测用户是否在漫游而不是在设置中切换。
感谢帮助! :)
我找到了关于这个问题的一些解决方案..
这似乎是由于在这些设备上使用双 SIM 卡造成的,这些设备为此功能采用了较新的 API。 (我在 source code of Oxygen 上找到的)
- 此解决方案需要
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;
}
- 对于其余设备,您可以使用上面指定的解决方案。
我愿意检测手机上的漫游开关是否关闭。
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、三星 S5 都运行良好...
telephonyManager.isNetworkRoaming(),
并不是真正的解决方案,因为它会检测用户是否在漫游而不是在设置中切换。
感谢帮助! :)
我找到了关于这个问题的一些解决方案.. 这似乎是由于在这些设备上使用双 SIM 卡造成的,这些设备为此功能采用了较新的 API。 (我在 source code of Oxygen 上找到的)
- 此解决方案需要
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;
}
- 对于其余设备,您可以使用上面指定的解决方案。