通过查看android的TelephonyManager源码,得到以下方法来获取设备卡槽数和sim卡数
1.获取设备卡槽数
/**
* Returns the number of phones available.
* Returns 1 for Single standby mode (Single SIM functionality)
* Returns 2 for Dual standby mode.(Dual SIM functionality)
*/
public static int getSimCardCount(Context context) {
TelephonyManager mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
Class cls = mTelephonyManager.getClass();
try {
Method mMethod = cls.getMethod("getSimCount");
mMethod.setAccessible(true);
return (int) mMethod.invoke(mTelephonyManager);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return -1;
}
实际是调用了TelephonyManager().getSimCount()方法,因为该方法是隐藏的方法,所以需要通过反射来获取。
2.判断设备有效的Sim卡数
public static int getAvailableSimCardCount(Context context){
int count = 0;
SubscriptionManager mSubscriptionManager = SubscriptionManager.from(context);
for(int i = 0; i < getSimCardCount(context); i++){
SubscriptionInfo sir = mSubscriptionManager
.getActiveSubscriptionInfoForSimSlotIndex(i);
if(sir != null){
count++;
}
}
return count;
}