Android中获取手机SIM卡的各种信息

 通过以下工具类方法可以获取到手机SIM的各种信息数据!!!

package com.utils;
import android.telephony.TelephonyManager;
import com.baidu.platform.comapi.map.E;
import org.json.JSONArray;
import org.json.JSONObject;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 使用方法* TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);* SONArray simList = SimUtils.getAllSimInfo(tel);*/
public class SimUtils {public static JSONArray getAllSimInfo(TelephonyManager tel) throws Exception {Class clazz = tel.getClass();//获取能够进行反射的字段List<EMethod> list = new ArrayList<>();Map listIgnore = new HashMap<>();Method[] methods = clazz.getDeclaredMethods();for (Method method : methods) {String name = method.getName();if (!name.startsWith("get"))continue;if (listIgnore.get(name) != null)continue;listIgnore.put(name, 0);Method m1 = null;Method m2 = null;Method m3 = null;try {m1 = clazz.getDeclaredMethod(name);} catch (Exception e) {}try {m2 = clazz.getDeclaredMethod(name, int.class);} catch (Exception e) {}try {m3 = clazz.getDeclaredMethod(name, long.class);} catch (Exception e) {}if (m1 != null && ((m2 == null && m3 != null) || (m2 != null && m3 == null))) {Class c1 = m1.getReturnType();Class c2 = m2 == null ? null : m2.getReturnType();Class c3 = m3 == null ? null : m3.getReturnType();if (m2 == null) {if (c1 == null || c1 != c3)continue;} else {if (c1 == null || c1 != c2)continue;}EMethod item = new EMethod(name, m2 == null ? 1 : 0, c1);list.add(item);}}listIgnore.clear();JSONArray array = new JSONArray();for (int i = 0; i < 10; i++) {JSONObject json = new JSONObject();for (EMethod em : list) {Method method = null;Object param = null;if (em.type == 0) {method = clazz.getDeclaredMethod(em.name, int.class);param = i;} else {method = clazz.getDeclaredMethod(em.name, long.class);param = new Long(i);}if (!method.isAccessible())method.setAccessible(true);String name = em.name.substring(3);Object value = null;try {value = method.invoke(tel, param);} catch (Exception e) {//前面已经对private设置了可访问,有些仍是会报错,就无论这个了continue;}json.put(name, value);}if (json.optInt("SimState") == TelephonyManager.SIM_STATE_UNKNOWN || json.optInt("SimState") == TelephonyManager.SIM_STATE_ABSENT)continue;String imsi = json.optString("SubscriberId");if (imsi == null || imsi.length() == 0)continue;//根据imsi去重boolean repeact = false;for (int j = 0; j < array.length(); j++) {if (imsi.equals(array.optJSONObject(j).optString("SubscriberId"))) {repeact = true;break;}}if (repeact)continue;array.put(json);}return array;}static class EMethod {public String name;public int type;//0为int,1为longpublic Class returnType;//返回类型public EMethod(String name, int type, Class returnType) {this.name = name;this.type = type;this.returnType = returnType;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/65603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章教会你如何编写一个简单的Shell脚本

文章目录 简单Shell脚本编写1. 简单脚本编写2. Shell脚本参数2.1 Shell脚本参数判断2.1.1 文件测试语句2.1.2 逻辑测试语句2.1.3 整数值测试语句2.1.4 字符串比较语句 3. Shell流程控制语句3.1 if 条件测试语句3.1.1 if...3.1.2 if...else...3.1.3 if...elif...else 4. Shell脚…

汽车自适应巡航系统控制策略研究

目 录 第一章 绪论 .............................................................................................................................. 1 1.1 研究背景及意义 ..........................................................................................…

文件夹中lib,dll含义

.dll文件是动态链接库&#xff08;Dynamic Link Library&#xff09;的缩写&#xff0c;它包含了一组可执行的函数和数据&#xff0c;供程序调用。它可以被多个应用程序共享和重用&#xff0c;减少了代码的冗余。通过动态链接库&#xff0c;可以实现代码的模块化和提高代码的复…

百万级并发IM即时消息系统(4)用户基本CRUD

前置&#xff1a; 代码层次还是由低到高&#xff1a;model层数据库操作->service层封装->路由层调用业务 手把手详细教你如何使用go-swagger文档 - 掘金 (juejin.cn) golang swagger注解说明_go swagger 注释_mctlilac的博客-CSDN博客 Gin篇&#xff1a;gorm 使用 - …

ELK安装、部署、调试(五)filebeat的安装与配置

1.介绍 logstash 也可以收集日志&#xff0c;但是数据量大时太消耗系统新能。而filebeat是轻量级的&#xff0c;占用系统资源极少。 Filebeat 由两个主要组件组成&#xff1a;harvester 和 prospector。 采集器 harvester 的主要职责是读取单个文件的内容。读取每个文件&…

编译链接实战(14)符号重定位与重定位表

文章目录 1、什么是符号重定位2、重定位表1、什么是符号重定位 符号重定位的存在是为了解决程序中的符号引用问题。当一个可执行文件或共享库被编译时,其中可能会引用其他对象文件或共享库中定义的函数、变量或其他符号。这些引用通常以符号的名称表示,而不是实际的内存地址…

机器学习技术(六)——有监督学习算法之线性回归算法实操

机器学习技术&#xff08;五&#xff09;——有监督学习之线性回归算法实操 引言&#xff1a; 机器学习监督算法是一种基于已有标记数据的学习方法&#xff0c;通过对已知输入和输出数据的学习&#xff0c;建立一个模型来预测新的输入数据的输出。这种算法模仿人类的学习过程&a…

安防监控/视频汇聚平台EasyCVR调用rtsp地址返回的IP不正确是什么原因?

安防监控/云存储/磁盘阵列存储/视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RT…

Web 应用开发 - 实训一 网页开发

Web应用开发 实训一 网页开发 一、预习&#xff1a; 1、阅读&#xff1a;教材P1-P39 2、要掌握知识要点&#xff1a;表单标记、超链接标记、CSS的引用方式、CSS选择器、DOM、JavaScript的引入&#xff08;内嵌式、外链式&#xff09;、JavaScript的使用&#xff08;事件处理…

服务器允许ssh登录root

用vim打开/etc/ssh/sshd_config sudo vim /etc/ssh/sshd_config将sshd_config中的PermitRootLogin属性改为yes ... PermitRootLogin yes ...重启sshd服务 sudo service sshd restart

docker 笔记2 Docker镜像和数据卷

参考&#xff1a; 1.镜像是什么&#xff1f;&#xff08;面试题&#xff09; 是一种轻量级、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文…

微信小程序-生成canvas图片并保存到手机相册

wxml页面 <button class"rightbtn bottomBtnCss" catch:tap"canvasImg"><image src{{imgUrl}}/images/mine/jspj-icon.png class"restNumImg"></image><text class"btnText">生成图片</text></but…

算法笔记——路径问题

在引入介绍如何写一个算法的时候&#xff0c;我们先引入一个题作为例子 1137. 第 N 个泰波那契数 - 力扣&#xff08;LeetCode&#xff09; 作为刚开始学习算法的我们&#xff0c;看到这个题目的时候&#xff0c;应该想好以下的问题&#xff1a; 1.状态表示 我们要用什么来表…

Windows7安装SSH客户端的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

SQL sever中库管理

目录 一、创建数据库 1.1库界面方式 1.2SQL命令方式 二、修改数据库 2.1库界面方式 2.2SQL命令方式 三、删除数据库 3.1库界面方式 3.2SQL命令方式 四、附加和分离数据库 4.1附加和分离数据库概述 4.2作用 4.3附加和分离数据库方法 4.4示例 一、创建数据库 1.1库…

第 3 章 栈和队列 (循环队列)

1. 背景说明 和顺序栈相类似&#xff0c;在队列的顺序存储结构中&#xff0c;除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外&#xff0c; 尚需附设两个指针 front 和 rear 分别指示队列头元素及队列尾元素的位置。约定&#xff1a;初始化建空队列时&#x…

力扣:81. 搜索旋转排序数组 II(Python3)

题目&#xff1a; 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转 &#xff0c;使数组变为 [nums[k], nums[k1], .…

XmlDocument.SelectNodes 不起作用

今天采用Xpath读取Xml节点&#xff0c;怎么都读不出。 问题分析&#xff1a; 错误代码如下&#xff1a; XmlDocument xmlD new XmlDocument();xmlD.PreserveWhitespace true;xmlD.LoadXml(xStr);xmlD.SelectNodes("job-scheduling-data/schedule/job");经排查 do…

Python学习笔记——从面试题出发学习Python

Python学习笔记——从面试题出发学习Python Python学习笔记——从面试题出发学习Python1. 可变数据类型与不可变数据类型&#xff0c;深拷贝与浅拷贝&#xff0c;函数参数的传递机制1.1 变量与对象1.2 可变数据类型与不可变数据类型1.3 深拷贝与浅拷贝1.4 函数参数的传递机制1.…

element-plus的周选择器 一周从周一开始

1、代码 1&#xff09;、template中 <el-date-picker v-model"value1" type"week" format"[Week] ww" placeholder"巡访周" change"change"value-format"YYYY-MM-DD" /> 2&#xff09;、方法中 import…