1

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

4

1 回答 1

2
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 类中调用 getSubscriberId(int) 方法,并使用上述步骤中获得的值。此方法的返回值将是 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;
于 2018-10-09T12:26:20.387 回答