Hit*_*ani 6 android operating-system internet-connection android-networking dual-sim
我正在构建一个网络监视器应用程序 在这里,我已成功实现了Wifi或移动数据中的跟踪数据使用等所有内容,但我想知道哪些SIM连接到互联网并使用移动数据.
使用下面的代码我能够知道我的双卡手机是否连接到Wifi或移动数据.
public static String isInternetConnected (Context ctx) {
ConnectivityManager connectivityMgr = (ConnectivityManager) ctx
.getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = connectivityMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connectivityMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
// Check if wifi or mobile network is available or not. If any of them is
// available or connected then it will return true, otherwise false;
if (wifi != null) {
if (wifi.isConnected()) {
return "wifi";
}
}
if (mobile != null) {
if (mobile.isConnected()) {
return "mobile";
}
}
return "none";
}
Run Code Online (Sandbox Code Playgroud)
如何在双卡安卓手机中获取消耗移动数据的SIM索引或SIM卡操作员名称?
我已经搜查了很多,我看到了张贴在SO不一样的答案很多问题本.
我能够在双SIM卡手机中获得两个SIM卡的subId,但我正在逐步解决问题,以了解哪个SIM卡正在使用互联网.
许多其他应用程序能够像Mubble一样做到这一点.
任何人都可以为我提供解决方案吗?
api级别22之后,您可以通过反射使用隐藏的系统api android.telephony.SubscriptionManager#getDefaultDataSubId来获取当前活跃的数据sim订阅索引。
api level 24之后,有一个公共系统apiandroid.telephony.SubscriptionManager#getDefaultDataSubscriptionId来获取当前活跃数据sim订阅索引。
然后,您可以创建一个android.telephony.TelephonyManager或android.telephony.SubscriptionManager#getActiveSubscriptionInfo从订阅索引来获取SIM运营商信息。
这是一个获取双卡手机数据卡运营商的简单解决方案。
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |