通过以下工具类方法可以获取到手机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
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为long
- public Class returnType;//返回类型
- public EMethod(String name, int type, Class returnType) {
- this.name = name;
- this.type = type;
- this.returnType = returnType;
- }
- }
- }