1:默认数据卡

private int getDefalutDataID(){SubscriptionManager subscriptionManager = (SubscriptionManager)getContext().getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    int subscriberId = 0;
    if (Build.VERSION.SDK_INT > 24) {subscriberId = SubscriptionManager.getDefaultDataSubscriptionId();
    }else{try {Class cls  =  SubscriptionManager.class.getClass();
            Method method = cls.getDeclaredMethod("getDefaultDataSubId");
            subscriberId = (Integer) method.invoke(subscriptionManager);
        }catch (Exception e){e.printStackTrace();}}return subscriberId;
}

返回值1是卡一返回2是卡2,24以上不需要使用反射

2:获取sim卡信息,1中获取到的sim卡subId为参数,获取对应的SubscriptionInfo实例,可以获取到sim卡的信息

private SubscriptionInfo getSIMInfo(int subId){SubscriptionManager subscriptionManager = (SubscriptionManager)getContext().getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    List<SubscriptionInfo> infos = subscriptionManager.getActiveSubscriptionInfoList();
    SubscriptionInfo infoRet = null;
    for (SubscriptionInfo info:infos){Log.e("xubaipei",info.toString());
        if (info.getSubscriptionId() ==  subId){infoRet = info;
        }}return infoRet;
}

3:sim1,sim2监听信号强度

new 出2个PhoneStateListener实例来监听sim卡1和卡2,new出的mListener

通过反射改变实例内的mSubId 属性来切换监听的sim卡信号强度,subscriberId 为1是卡1,2是卡2 ,一般是函数getDefaultDataId()中获取的默认数据卡

try {Field field = PhoneStateListener.class.getDeclaredField("mSubId");
    field.setAccessible(true);
    field.setInt(mListener,subscriberId);
}catch (Exception e){e.printStackTrace();
}

可以通过获取signalStrength中toString 的值来获取所有的信号强度,也可以像我这样获取所有的CellInfo来逐个判断

2G,3G信号,2G/3G信号强度符合dbm = --113 + 2*asu;4G信号强度符合asu = 140 +dmb

mListener = new PhoneStateListener() {@Override
    public void onSignalStrengthsChanged(SignalStrength signalStrength) {if (isHidden()) {return;
        }int level = 0;
        int dbm = 0;
        int asu = 0;

        List<CellInfo> infos = telManager.getAllCellInfo();
        if (infos == null){return;}for (CellInfo info :infos){if (!info.isRegistered()){continue;
            }if (info instanceof CellInfoLte){//4G
                CellInfoLte ff = (CellInfoLte)info;
                dbm = ff.getCellSignalStrength().getDbm();
                level = ff.getCellSignalStrength().getLevel();
                asu = 140 + dbm;
            }else
            if (info instanceof CellInfoWcdma){//3G
                CellInfoWcdma ff = (CellInfoWcdma)info;
                dbm = ff.getCellSignalStrength().getDbm();
                level = ff.getCellSignalStrength().getLevel();
                asu = (dbm + 113) / 2;
            }else
            if (info instanceof  CellInfoGsm){//2G
                CellInfoGsm ff = (CellInfoGsm)info;
                dbm = ff.getCellSignalStrength().getDbm();
                level = ff.getCellSignalStrength().getLevel();
                asu = (dbm + 113) / 2;
            }mSignalView.setProgress(level * 25);
            if (dbm == 0){return;
            }mSignalText.setText(String.valueOf(asu));
        }}
};

开始监听信号:

telManager.listen(mListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

android 双卡开发获取sim卡默认数据卡,获取sim卡信息,sim1卡,sim2卡 2G/3G/4G信号强度相关推荐

  1. 检查SIM卡当前环境是否支持2G/3G/4G/5G

    我的是小米手机,就以小米为例子 设置 移动网络SIM卡信息 网络类型选择 选择2G/3G/4G/5G

  2. android 判断2g 3g 4g,如何确定网络类型是2G,3G还是4G

    根据此处的Android开发人员文档和Wikipedia链接,我给出了注释并定义了网络类型.请检查注释中的链接. 您可以使用getNetworkType获取网络类型. public class Com ...

  3. Android 判断用户2G/3G/4G移动数据网络

    2019独角兽企业重金招聘Python工程师标准>>> Android 判断用户2G/3G/4G移动数据网络 在做 Android App 的时候,为了给用户省流量,为了不激起用户的 ...

  4. (转)Android 判断用户2G/3G/4G移动数据网络

    在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需(要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G ...

  5. QCSuper:在高通手机猫上捕获无线2G/3G/4G数据包

    QCSuper是一种基于高通(Qualcomm)手机和调制解调器(俗称"猫")通信的工具,可以捕获原始的2G/3G/4G无线电帧等数据内容.它允许你使用已root的安卓手机,usb ...

  6. 在高通手机猫上捕获无线2G/3G/4G数据包的工具QCSuper

    QCSuper是一种基于高通(Qualcomm)手机和调制解调器(俗称"猫")通信的工具,可以捕获原始的2G/3G/4G无线电帧等数据内容.它允许你使用已root的安卓手机,usb ...

  7. 联发科(MTK)、高通(Qualcomm)2G/3G/4G/5G模块定制与开发服务

    新移科技拥有多年联发科(MTK),高通(Qualcomm)2G/3G/4G系列平台开发经验,专注于无线通信方案软硬件开发.在持续推出标准核心板及开发套件的同时,为满足客户个性化项目需求,提供定制开发服 ...

  8. 【Android FFMPEG 开发】FFMPEG 解码 AVPacket 数据到 AVFrame ( AVPacket-解码器 | 初始化 AVFrame | 解码为 AVFrame 数据 )

    文章目录 I . FFMPEG 解码 AVPacket 数据到 AVFrame 前置操作 II . FFMPEG 解码 AVPacket 数据到 AVFrame 流程 III . FFMPEG 发送 ...

  9. php获取post表单数据_PHP获取POST表单数据

    php获取post表单数据,这是再正常不过的场景了,这里有几点需要注意,网上也都有提到.别人总结的毕竟不是自己的,为了体会这些注意点,我自己在本地搭建一个web application, 然后去验证. ...

最新文章

  1. JS中字符串的相关操作
  2. 在 Linux 系统中安装Load Generator ,并在windows 调用
  3. Web项目MySQL配置文件运维
  4. HDU4006(The kth great number)
  5. 腾讯回应发布虚假广告被罚20万;苹果客服回应iPhone 12屏幕发绿;Chrome 87 正式版发布|极客头条...
  6. 体检结果(2018年10月,胃肠镜)
  7. 有效解决RaycastTarget勾选过多的烦恼
  8. leetcode 859. Buddy Strings
  9. 高等代数——大学高等代数课程创新教材(丘维声)——2.2笔记+习题
  10. OpenG 分化基础知识
  11. python使用win32com复制word的某一页然后粘贴到新的word页面中
  12. iOS打开应用提示未受信任的企业级开发者
  13. 服务器80端口找不到,如何查询服务器80端口被关闭
  14. 微信小程序 教你如何复制页面路径 (以及京东、虎牙、苏宁、拼多多、等大厂的加密路径详解)(多图!!!)
  15. 如何在服务器上快速克隆虚拟机,制作虚拟机模板快速克隆Linux虚拟机
  16. 人工智能数学基础---不定积分3:分部积分法
  17. stm32 printf打印出错,信息不完整解决办法
  18. 巴西龟饲养日志----巴西龟肺炎治疗情况
  19. 软件测试公司折扣政策,@软件企业看,这些税收优惠政策请收下
  20. 【Python爬虫】第一课 Python爬虫环境与爬虫简介

热门文章

  1. 中断处理与特权级转移
  2. 2021年安全员-C证考试题及安全员-C证新版试题
  3. Android 10.0横屏旋转开机动画显示不全的解决方案
  4. 新标韩语第一册 单词-句子
  5. 《程序员的创世传说》第三节 魔王与2012 1
  6. 怎么做好压铸件的产品结构设计
  7. Java数据库连接(JDBC)之连接失败问题汇总
  8. Microsoft TechReady-MOSS(Sharepoint)2007深度培训
  9. 上半年企业营销案例总结
  10. Redis常见使用案例