//第一步 先加入权限,在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 "";}}

//--------------------------------------------------------------------完--------------------------------------------------------------------------------------

83.android 简单的获取手机SIM卡卡槽数量,当前SIM卡数量。相关推荐

  1. 在Android中快速获取手机的高级权限

    在Android中快速获取手机的高级权限 想要快速获取Android手机的ROOT权限吗?也许因为ROOT教程太复杂,也许因为不会进工程模式,让我们在使用Android手机时感觉像是开别人的车一样,总 ...

  2. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于访问有关设 ...

  3. android如何读取sim卡联系人信息,Android上如何获取手机和sim卡的联系人信息

    需求很明确,获取手机和sim的联系人信息.接口设计也很简介 public interface OnFetchContactsListener { void onFetcherContactsCompl ...

  4. android 安卓APP获取手机设备信息和手机号码的代码示例

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  5. android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例 .

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  6. android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  7. android 6.0获取手机imei,android获取手机信息大全,android获取大全,IMEI号,IESI号,...

    android获取手机信息大全,android获取大全,IMEI号,IESI号, IMEI号,IESI号,手机型号: [java] view plaincopyprint?private void g ...

  8. Android初级教程获取手机系统联系人信息

    在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...

  9. 信号强度 android,一种获取手机信号强度的方法

    出于项目需求,需要获取到手机信号强度.本人不才,以前都是采用toString()的方法,然后截取,得到强度,但发现很多机型都不适合.苦苦在API中搜寻,结果都不是很理想.最后在Stackoverflo ...

最新文章

  1. 2021-06-04
  2. javascript模式——Mixin
  3. 使用java代码发送zip文件到邮箱_Azkaban安装与使用(下)
  4. bzoj3202:[Sdoi2013]项链
  5. Alibaba分层领域模型规约
  6. bzoj3998 [TJOI2015]弦论
  7. 云痕大数据 家长登录_智学网家长学生查分入口:www.zhixue.com
  8. log4j配置文件,日志文件的模板
  9. mysql如何进行宿舍分配_手把手教你做一个Jsp Servlet Mysql实现的学生宿舍管理系统...
  10. 好用到叫出声!强烈推荐 10 款 Mac 软件!
  11. “传递关爱 感恩社会” ——美斯坦福2017年捐资助学仪式隆重举行
  12. 典型企业设备链路冗余备份方案
  13. 关于六度分割理论的一点认识
  14. AE新手基础入门教程50套从新手到高手
  15. FreeBSD常用命令110条
  16. TDSQL PG 版企业级分布式数据库技术创新实践
  17. 你还在问我Bean的生命周期?带你看看一个Spring Bean从诞生到逝去的九次人生转折!
  18. 你还在担心你的 IP 被封吗?
  19. 东大916计算机网络分析题复习总结
  20. 模态指令和非模态指令

热门文章

  1. 又一次淡淡的感动——《鸡排英雄》观后感
  2. 微信小程序 获取用户手机屏幕高度与宽度
  3. OpenPose+VS2015+Windows+CUDA8+cuDNN5.1 官方配置教程
  4. Hangfire详解
  5. ad板子挖孔_用AD软件画孔的注意了!
  6. html鼠标经过图片放大
  7. 定制任务栏托盘的dll
  8. JavaSE-饿了么项目实战
  9. java 编辑excel文件合并单元格边框显示问题
  10. 2018中国大学生程序设计竞赛 – 网络选拔赛 1001 Buy and Resell [模拟]