使用 NetworkStatsManager 分别查询两个 sim 的数据使用情况

Query data usage for both sim individually using NetworkStatsManager

我需要使用 NetworkStatsManager 为整个设备查询双 SIM 手机中两张 SIM 卡的数据使用情况,因为需要报告每张 SIM 卡 1 天的数据使用情况。因此,我需要使用方法 querySummaryForDevice()。我需要传递订阅 ID,我认为每个 sim 卡都应该不同。我尝试使用此处提到的订阅管理器解决方案: 不知何故,从这里获取订阅 ID returns 0 字节作为数据使用。截至目前,我正在使用 TelephonyManager 获取订阅 ID。

SubscriptionManager subscriptionManager = (SubscriptionManager) ControlApplication.getControlApplicationContext().getSystemService(
Context.TELEPHONY_SUBSCRIPTION_SERVICE);
List<SubscriptionInfo> subInfoList = subscriptionManager.getActiveSubscriptionInfoList();
int id = subInfoList.get(i). getSubscriptionId();

//Here, i is index in the list.

现在使用反射调用 TelephonyManager class 中的 getSubscriberId(int) 方法,并使用在上述步骤中获得的值。 Return 此方法的值将需要 sim 卡的订阅者 ID,可以在 querySummaryForDevice() 方法中使用它来获取该 sim 卡的数据使用情况。使用反射的代码:

Class<?> c = Class.forName("android.telephony.TelephonyManager");
Method m = c.getMethod("getSubscriberId", int.class);
Object o = m.invoke(telephonyManagerInstance, id);
subscriberId = (String) o;