//第一步 先加入权限,在AndroidManifest.xml里加入:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
//动态权限申请:
//权限初始化
private int READ_PHONE_STATE = 1;
private String[] CALLS_STATE = {
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO,
};
/*
* 方法名:verifyStoragePermissions(Activity activity)
* 功 能:6.0动态权限
* 参 数:Activity activity
* 返回值:无
*/
public void verifyStoragePermissions(Activity activity) {
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, CALLS_STATE, READ_PHONE_STATE);
}
}
//在Activity里调用:
verifyStoragePermissions(this);//调用请求6.0权限的方法
//好了 权限申请完成后开始获取SIM卡槽数量,可用SIM卡数量:
@TargetApi(Build.VERSION_CODES.M)
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
private void JudgeSIM() {
TelephonyManager tm = (TelephonyManager)getContext().getSystemService(TELEPHONY_SERVICE);
int phoneCount = tm.getPhoneCount(); //获取当前SIM卡槽数量
//获取当前SIM卡数量
int activeSubscriptionInfoCount = SubscriptionManager.from(getContext()).getActiveSubscriptionInfoCount();
Toast.makeText(getContext(), "卡槽数量:"+phoneCount, Toast.LENGTH_SHORT).show();
Toast.makeText(getContext(), "当前SIM卡数量:"+activeSubscriptionInfoCount, Toast.LENGTH_SHORT).show();
}
sim卡信息工具类:
/**
* 获取sim卡信息
*
* @author CJF
*/
public class SimCardUtil {
@SuppressLint("StaticFieldLeak")
private volatile static SimCardUtil simCardUtil = null;
private final String TAG = "SimCardUtil";
public static SimCardUtil getInstance() {
if (null == simCardUtil) {
synchronized (SimCardUtil.class) {
if (null == simCardUtil) {
simCardUtil = new SimCardUtil();
}
}
}
return simCardUtil;
}
/**
* 获取sim卡信息
*/
public List<SubscriptionInfo> getCallingSimCard() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
SubscriptionManager mSubscriptionManager = SubscriptionManager.from(context);
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
return new ArrayList<>();
}
List<SubscriptionInfo> list = mSubscriptionManager.getActiveSubscriptionInfoList();
for (SubscriptionInfo info : list) {
String iccId = info.getIccId();
Log.d(TAG, " iccId:" + iccId);
Log.d(TAG, " info:" + info.toString());
}
return list;
}
return new ArrayList<>();
}
/**
* 获取当前sim卡数量
*
* @return
*/
public int getSimCardCount() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
SubscriptionManager from = SubscriptionManager.from(context);
//获取当前SIM卡数量
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
return 0;
}
int activeSubscriptionInfoCount = from.getActiveSubscriptionInfoCount();
Log.d(TAG, "当前SIM卡数量:" + activeSubscriptionInfoCount);
return activeSubscriptionInfoCount;
}
return 0;
}
/**
* 是否双卡
*
* @return 双卡true 不是双卡false
*/
public boolean isTwoSimCards() {
return getSimCardCount() == 2;
}
/**
* 手机是否有sim卡存在
*
* @return 不存在true 存在false
*/
public boolean isSimCardsExists() {
return getSimCardCount() == 0;
}
/**
* sim卡1是否存在
*
* @return true存在 false不存在
*/
public boolean isSim1CardExist() {
if (isSimCardsExists()) {
return false;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
List<SubscriptionInfo> infoList = getCallingSimCard();
for (SubscriptionInfo info : infoList) {
if (info.getSimSlotIndex() == 0) {
return true;
}
}
}
return false;
}
/**
* sim卡2是否存在
*
* @return true存在 false不存在
*/
public boolean isSim2CardExist() {
if (isSimCardsExists()) {
return false;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
List<SubscriptionInfo> infoList = getCallingSimCard();
for (SubscriptionInfo info : infoList) {
if (info.getSimSlotIndex() == 1) {
return true;
}
}
}
return false;
}
/**
* 获取sim1运营商名称
*
* @return
*/
public String getSim1CarrierName() {
if (isSimCardsExists()) {
return null;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
List<SubscriptionInfo> infoList = getCallingSimCard();
for (SubscriptionInfo info : infoList) {
if (info.getSimSlotIndex() == 0) {
return info.getCarrierName().toString();
}
}
}
return null;
}
/**
* 获取sim2运营商名称
*
* @return
*/
public String getSim2CarrierName() {
if (isSimCardsExists()) {
return null;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
List<SubscriptionInfo> infoList = getCallingSimCard();
for (SubscriptionInfo info : infoList) {
if (info.getSimSlotIndex() == 1) {
return info.getCarrierName().toString();
}
}
}
return null;
}
/**
* 获取指定sim卡订阅Id
*
* @param slotId sim卡
* @return subscriptionId
*/
public int getSimSubscriptionId(int slotId) {
if (isSimCardsExists()) {
return 0;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
List<SubscriptionInfo> infoList = getCallingSimCard();
for (SubscriptionInfo info : infoList) {
if (info.getSimSlotIndex() == slotId) {
return info.getSubscriptionId();
}
}
}
return 0;
}
/**
* 获取当前传递的iccid是属于哪张sim卡
*
* @param iccId
*/
public int getSimSlotIndex(String iccId) {
if (null == iccId) {
return 0;
}
if (iccId.length() == 1) {
return Integer.parseInt(iccId);
}
if (isSimCardsExists()) {
return 0;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
List<SubscriptionInfo> infoList = getCallingSimCard();
for (SubscriptionInfo info : infoList) {
if (iccId.equals(info.getIccId())) {
return info.getSimSlotIndex();
}
}
}
return 0;
}
/**
* 获取sim卡对应的iccid
*
* @return
*/
public String getSimIccid(int slotId) {
if (isSimCardsExists()) {
return "";
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
List<SubscriptionInfo> infoList = getCallingSimCard();
for (SubscriptionInfo info : infoList) {
if (info.getSimSlotIndex() == slotId) {
return info.getIccId();
}
}
}
return "";
}
}
//--------------------------------------------------------------------完--------------------------------------------------------------------------------------