有没有办法通过编程的方式在Android的SIM1或SIM2中检查移动数据是否活动??
此外,我想要获得运营商提供商的数据是活跃的。
Eq :SIM1:载波1 SIM2:载波2
如果SIM2上的数据是活动的,它应该返回运营商2的名称。
发布于 2017-10-16 05:15:14
我的方式(安卓>= 22)
int getDefaultDataSubscriptionId(final SubscriptionManager subscriptionManager) {
if (android.os.Build.VERSION.SDK_INT >= 24) {
int nDataSubscriptionId = SubscriptionManager.getDefaultDataSubscriptionId();
if (nDataSubscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
return (nDataSubscriptionId);
}
}
try {
Class<?> subscriptionClass = Class.forName(subscriptionManager.getClass().getName());
try {
Method getDefaultDataSubscriptionId = subscriptionClass.getMethod("getDefaultDataSubId");
try {
return ((int) getDefaultDataSubscriptionId.invoke(subscriptionManager));
}
catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
}
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
}
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
return (SubscriptionManager.INVALID_SUBSCRIPTION_ID);
}
@TargetApi(22)
public String getUIText22(final TelephonyManager telephonyManager) {
SubscriptionManager subscriptionManager = (SubscriptionManager) getContext().getApplicationContext().getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
int nDataSubscriptionId = getDefaultDataSubscriptionId(subscriptionManager);
if (nDataSubscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
SubscriptionInfo si = subscriptionManager.getActiveSubscriptionInfo(nDataSubscriptionId);
if (si != null) {
return (si.getCarrierName().toString());
}
}
}发布于 2020-06-12 20:37:24
这里是获得用于双sim环境当前活动数据sim运算符的简单解决方案。它在api级别22之后工作。
public static String getDataSimOperator(Context context) {
if (context == null) {
return null;
}
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (tm != null) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
int dataSubId = SubscriptionManager.getDefaultDataSubscriptionId();
TelephonyManager dataSimManager = tm.createForSubscriptionId(dataSubId);
return dataSimManager.getSimOperator();
} else {
String operator = getDataSimOperatorBeforeN(context);
if (operator != null) {
return operator;
} else {
return tm.getSimOperator();
}
}
} else {
return tm.getSimOperator();
}
}
return null;
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
private static String getDataSimOperatorBeforeN(Context context) {
if (context == null) {
return null;
}
int dataSubId = -1;
try {
Method getDefaultDataSubId = SubscriptionManager.class.getDeclaredMethod("getDefaultDataSubId");
if (getDefaultDataSubId != null) {
getDefaultDataSubId.setAccessible(true);
dataSubId = (int) getDefaultDataSubId.invoke(null);
}
} catch (Exception e) {
e.printStackTrace();
}
if (dataSubId != -1) {
SubscriptionManager sm = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
if (sm != null && ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)
== PackageManager.PERMISSION_GRANTED) {
SubscriptionInfo si = sm.getActiveSubscriptionInfo(dataSubId);
if (si != null) {
// format keep the same with android.telephony.TelephonyManager#getSimOperator
// MCC + MNC format
return String.valueOf(si.getMcc()) + si.getMnc();
}
}
}
return null;
}https://stackoverflow.com/questions/39823886
复制相似问题