作为已接受答案的后续行动,我还想指出,在以下代码中,
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String subscriberID = tm.getSubscriberId(); //subscriberID is usually the IMSI number (for GSM phones)
TelephonyManager tm
包含有关用于拨打电话的默认电话服务(SIM 卡)的信息。因此,如果您使用带有双 SIM 卡的手机,并且 SIM 1 用于通话,而 SIM 2 用于数据,TelephonyManager tm
则将保存有关 SIM 1 以及您的用例中NetworkStatsManager
用于获取数据使用情况的信息stats,SIM 1 信息将没有用,因为它不用于消费数据。因此,您需要以某种方式获取TelephonyManager
SIM 2 的信息,以便您可以使用 SIM 2 的正确订户 IDnetworkStatsManager.querySummaryForDevice()
来获取移动数据使用统计信息。那么,你如何做到这一点?
我想出的一种方法是这样的:
public void subscriberIdsOfDualSim(){
SubscriptionManager subscriptionManager = SubscriptionManager.from(this);
//we'll now get a List of information of active SIM cards
//for example, if there are 2 SIM slots and both the slots have 1 SIM card each, then the List size will be 2
List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();
TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfoList) {
//loop through the SIM card info
//if there are 2 SIM cards, then we'll try to print the subscriberId of each of the SIM cards
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
//the following createForSubscriptionId() is available from API 24 :(
TelephonyManager manager1=manager.createForSubscriptionId(subscriptionInfo.getSubscriptionId());
String operatorName=manager1.getNetworkOperatorName();
String subscriberId=manager1.getSubscriberId(); //use this subscriberId to do NetworkStatsManager stuff
System.out.println("subscriberIdsOfDualSim: Carrier Name: "+operatorName+", subscriber id: "+subscriberId);
}
}
}
请注意,我使用了createForSubscriptionId()
方法。此方法的一个限制是它只能从 API 24 (Android 7.0 Nougat) 使用。
因此,如果您同时使用 SIM 1 和 SIM 2 进行数据消费,那么您可以通过将每张 SIM 卡的 提供给 来获取每张 SIM 卡的数据使用subscriberId
信息networkStatsManager.querySummaryForDevice()
。但是,如果您想获得正确的移动数据消耗(包括 SIM 1 和 SIM 2)并且您想支持 Nougat 以下的手机,那么您可能必须使用课堂上的getMobileRxBytes()
好getMobileTxBytes()
方法。TrafficStats