public class MobileUtil { /** * Print telephone info. */ public static String printMobileInfo(Context context) { Date date = new Date(System.currentTimeMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = dateFormat.format(date); StringBuilder sb = new StringBuilder(); sb.append("系统时间:").append(time).append("\n"); TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String IMSI = tm.getSubscriberId(); //IMSI前面三位460是国家号码,其次的两位是运营商代号,00、02是中国移动,01是联通,03是电信。 String providerName = null; if (IMSI != null) { if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) { providerName = "中国移动"; } else if (IMSI.startsWith("46001")) { providerName = "中国联通"; } else if (IMSI.startsWith("46003")) { providerName = "中国电信"; } } sb.append(providerName).append("\n").append(getNativePhoneNumber(context)).append("\n网络模式:").append(getNetType(context)).append("\nIMSI是:").append(IMSI); sb.append("\nDeviceID(IMEI) :").append(tm.getDeviceId()); sb.append("\nDeviceSoftwareVersion:").append(tm.getDeviceSoftwareVersion()); sb.append("\ngetLine1Number :").append(tm.getLine1Number()); sb.append("\nNetworkCountryIso :").append(tm.getNetworkCountryIso()); sb.append("\nNetworkOperator :").append(tm.getNetworkOperator()); sb.append("\nNetworkOperatorName :").append(tm.getNetworkOperatorName()); sb.append("\nNetworkType :").append(tm.getNetworkType()); sb.append("\nPhoneType :").append(tm.getPhoneType()); sb.append("\nSimCountryIso :").append(tm.getSimCountryIso()); sb.append("\nSimOperator :").append(tm.getSimOperator()); sb.append("\nSimOperatorName :").append(tm.getSimOperatorName()); sb.append("\nSimSerialNumber :").append(tm.getSimSerialNumber()); sb.append("\ngetSimState :").append(tm.getSimState()); sb.append("\nSubscriberId :").append(tm.getSubscriberId()); sb.append("\nVoiceMailNumber :").append(tm.getVoiceMailNumber()); return sb.toString(); } /** * 打印系统信息 * @return */ public static String printSystemInfo() { Date date = new Date(System.currentTimeMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = dateFormat.format(date); StringBuilder sb = new StringBuilder(); sb.append("_______ 系统信息 ").append(time).append(" ______________"); sb.append("\nID :").append(Build.ID); sb.append("\nBRAND :").append(Build.BRAND); sb.append("\nMODEL :").append(Build.MODEL); sb.append("\nRELEASE :").append(Build.VERSION.RELEASE); sb.append("\nSDK :").append(Build.VERSION.SDK); sb.append("\n_______ OTHER _______"); sb.append("\nBOARD :").append(Build.BOARD); sb.append("\nPRODUCT :").append(Build.PRODUCT); sb.append("\nDEVICE :").append(Build.DEVICE); sb.append("\nFINGERPRINT :").append(Build.FINGERPRINT); sb.append("\nHOST :").append(Build.HOST); sb.append("\nTAGS :").append(Build.TAGS); sb.append("\nTYPE :").append(Build.TYPE); sb.append("\nTIME :").append(Build.TIME); sb.append("\nINCREMENTAL :").append(Build.VERSION.INCREMENTAL); sb.append("\n_______ CUPCAKE-3 _______"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) { sb.append("\nDISPLAY :").append(Build.DISPLAY); } sb.append("\n_______ DONUT-4 _______"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.DONUT) { sb.append("\nSDK_INT :").append(Build.VERSION.SDK_INT); sb.append("\nMANUFACTURER :").append(Build.MANUFACTURER); sb.append("\nBOOTLOADER :").append(Build.BOOTLOADER); sb.append("\nCPU_ABI :").append(Build.CPU_ABI); sb.append("\nCPU_ABI2 :").append(Build.CPU_ABI2); sb.append("\nHARDWARE :").append(Build.HARDWARE); sb.append("\nUNKNOWN :").append(Build.UNKNOWN); sb.append("\nCODENAME :").append(Build.VERSION.CODENAME); } sb.append("\n_______ GINGERBREAD-9 _______"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { sb.append("\nSERIAL :").append(Build.SERIAL); } return sb.toString(); } /**** * 获取网络类型 * * @param context * @return */ public static String getNetType(Context context) { try { ConnectivityManager connectMgr = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = connectMgr.getActiveNetworkInfo(); if (info == null) { return ""; } if (info.getType() == ConnectivityManager.TYPE_WIFI) { return "WIFI"; } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) { if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_CDMA) { return "CDMA"; } else if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE) { return "EDGE"; } else if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_EVDO_0) { return "EVDO0"; } else if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_EVDO_A) { return "EVDOA"; } else if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS) { return "GPRS"; } /* * else if(info.getSubtype() == * TelephonyManager.NETWORK_TYPE_HSDPA){ return "HSDPA"; }else * if(info.getSubtype() == TelephonyManager.NETWORK_TYPE_HSPA){ * return "HSPA"; }else if(info.getSubtype() == * TelephonyManager.NETWORK_TYPE_HSUPA){ return "HSUPA"; } */ else if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_UMTS) { return "UMTS"; } else { return "3G"; } } else { return ""; } } catch (Exception e) { return ""; } } /** * 获取当前设置的电话号码 */ public static String getNativePhoneNumber(Context context) { TelephonyManager telephonyManager = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); String NativePhoneNumber = null; NativePhoneNumber = telephonyManager.getLine1Number(); return String.format("手机号: %s", NativePhoneNumber); } /** * IMSI是国际移动用户识别码的简称(International Mobile Subscriber Identity) * IMSI共有15位,其结构如下: * MCC+MNC+MIN * MCC:Mobile Country Code,移动国家码,共3位,中国为460; * MNC:Mobile NetworkCode,移动网络码,共2位 * 在中国,移动的代码为电00和02,联通的代码为01,电信的代码为03 * 合起来就是(也是Android手机中APN配置文件中的代码): * 中国移动:46000 46002 * 中国联通:46001 * 中国电信:46003 * 举例,一个典型的IMSI号码为460030912121001 */ public static String getIMSI(Context context) { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String IMSI = telephonyManager.getSubscriberId(); return IMSI; } /** * IMEI是International Mobile Equipment Identity (国际移动设备标识)的简称 * IMEI由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的 * 其组成为: * 1. 前6位数(TAC)是”型号核准号码”,一般代表机型 * 2. 接着的2位数(FAC)是”最后装配号”,一般代表产地 * 3. 之后的6位数(SNR)是”串号”,一般代表生产顺序号 * 4. 最后1位数(SP)通常是”0″,为检验码,目前暂备用 */ public static String getIMEI(Context context) { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String IMEI = telephonyManager.getDeviceId(); return IMEI; } /_________________ 双卡双待系统IMEI和IMSI方案(see more on http://benson37.iteye.com/blog/1923946) /** * 双卡双待神机IMSI、IMSI、PhoneType信息 * <uses-permission android:name="android.permission.READ_PHONE_STATE"/> */ public static class TeleInfo { public String imsi_1; public String imsi_2; public String imei_1; public String imei_2; public int phoneType_1; public int phoneType_2; @Override public String toString() { return "TeleInfo{" + "imsi_1='" + imsi_1 + '\'' + ", imsi_2='" + imsi_2 + '\'' + ", imei_1='" + imei_1 + '\'' + ", imei_2='" + imei_2 + '\'' + ", phoneType_1=" + phoneType_1 + ", phoneType_2=" + phoneType_2 + '}'; } } /** * MTK Phone. * * 获取 MTK 神机的双卡 IMSI、IMSI 信息 */ public static TeleInfo getMtkTeleInfo(Context context) { TeleInfo teleInfo = new TeleInfo(); try { Class<?> phone = Class.forName("com.android.internal.telephony.Phone"); Field fields1 = phone.getField("GEMINI_SIM_1"); fields1.setAccessible(true); int simId_1 = (Integer) fields1.get(null); Field fields2 = phone.getField("GEMINI_SIM_2"); fields2.setAccessible(true); int simId_2 = (Integer) fields2.get(null); TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); Method getSubscriberIdGemini = TelephonyManager.class.getDeclaredMethod("getSubscriberIdGemini", int.class); String imsi_1 = (String) getSubscriberIdGemini.invoke(tm, simId_1); String imsi_2 = (String) getSubscriberIdGemini.invoke(tm, simId_2); teleInfo.imsi_1 = imsi_1; teleInfo.imsi_2 = imsi_2; Method getDeviceIdGemini = TelephonyManager.class.getDeclaredMethod("getDeviceIdGemini", int.class); String imei_1 = (String) getDeviceIdGemini.invoke(tm, simId_1); String imei_2 = (String) getDeviceIdGemini.invoke(tm, simId_2); teleInfo.imei_1 = imei_1; teleInfo.imei_2 = imei_2; Method getPhoneTypeGemini = TelephonyManager.class.getDeclaredMethod("getPhoneTypeGemini", int.class); int phoneType_1 = (Integer) getPhoneTypeGemini.invoke(tm, simId_1); int phoneType_2 = (Integer) getPhoneTypeGemini.invoke(tm, simId_2); teleInfo.phoneType_1 = phoneType_1; teleInfo.phoneType_2 = phoneType_2; } catch (Exception e) { e.printStackTrace(); } return teleInfo; } /** * MTK Phone. * * 获取 MTK 神机的双卡 IMSI、IMSI 信息 */ public static TeleInfo getMtkTeleInfo2(Context context) { TeleInfo teleInfo = new TeleInfo(); try { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); Class<?> phone = Class.forName("com.android.internal.telephony.Phone"); Field fields1 = phone.getField("GEMINI_SIM_1"); fields1.setAccessible(true); int simId_1 = (Integer) fields1.get(null); Field fields2 = phone.getField("GEMINI_SIM_2"); fields2.setAccessible(true); int simId_2 = (Integer) fields2.get(null); Method getDefault = TelephonyManager.class.getMethod("getDefault", int.class); TelephonyManager tm1 = (TelephonyManager) getDefault.invoke(tm, simId_1); TelephonyManager tm2 = (TelephonyManager) getDefault.invoke(tm, simId_2); String imsi_1 = tm1.getSubscriberId(); String imsi_2 = tm2.getSubscriberId(); teleInfo.imsi_1 = imsi_1; teleInfo.imsi_2 = imsi_2; String imei_1 = tm1.getDeviceId(); String imei_2 = tm2.getDeviceId(); teleInfo.imei_1 = imei_1; teleInfo.imei_2 = imei_2; int phoneType_1 = tm1.getPhoneType(); int phoneType_2 = tm2.getPhoneType(); teleInfo.phoneType_1 = phoneType_1; teleInfo.phoneType_2 = phoneType_2; } catch (Exception e) { e.printStackTrace(); } return teleInfo; } /** * Qualcomm Phone. * 获取 高通 神机的双卡 IMSI、IMSI 信息 */ public static TeleInfo getQualcommTeleInfo(Context context) { TeleInfo teleInfo = new TeleInfo(); try { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); Class<?> simTMclass = Class.forName("android.telephony.MSimTelephonyManager"); // Object sim = context.getSystemService("phone_msim"); Object sim = context.getSystemService(Context.TELEPHONY_SERVICE); int simId_1 = 0; int simId_2 = 1; Method getSubscriberId = simTMclass.getMethod("getSubscriberId", int.class); String imsi_1 = (String) getSubscriberId.invoke(sim, simId_1); String imsi_2 = (String) getSubscriberId.invoke(sim, simId_2); teleInfo.imsi_1 = imsi_1; teleInfo.imsi_2 = imsi_2; Method getDeviceId = simTMclass.getMethod("getDeviceId", int.class); String imei_1 = (String) getDeviceId.invoke(sim, simId_1); String imei_2 = (String) getDeviceId.invoke(sim, simId_2); teleInfo.imei_1 = imei_1; teleInfo.imei_2 = imei_2; Method getDataState = simTMclass.getMethod("getDataState"); int phoneType_1 = tm.getDataState(); int phoneType_2 = (Integer) getDataState.invoke(sim); teleInfo.phoneType_1 = phoneType_1; teleInfo.phoneType_2 = phoneType_2; } catch (Exception e) { e.printStackTrace(); } return teleInfo; } /** * Spreadtrum Phone. * * 获取 展讯 神机的双卡 IMSI、IMSI 信息 */ public static TeleInfo getSpreadtrumTeleInfo(Context context) { TeleInfo teleInfo = new TeleInfo(); try { TelephonyManager tm1 = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String imsi_1 = tm1.getSubscriberId(); String imei_1 = tm1.getDeviceId(); int phoneType_1 = tm1.getPhoneType(); teleInfo.imsi_1 = imsi_1; teleInfo.imei_1 = imei_1; teleInfo.phoneType_1 = phoneType_1; Class<?> phoneFactory = Class.forName("com.android.internal.telephony.PhoneFactory"); Method getServiceName = phoneFactory.getMethod("getServiceName", String.class, int.class); getServiceName.setAccessible(true); TelephonyManager tm2 = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String imsi_2 = tm2.getSubscriberId(); String imei_2 = tm2.getDeviceId(); int phoneType_2 = tm2.getPhoneType(); teleInfo.imsi_2 = imsi_2; teleInfo.imei_2 = imei_2; teleInfo.phoneType_2 = phoneType_2; } catch (Exception e) { e.printStackTrace(); } return teleInfo; } /** * 获取 MAC 地址 * <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> */ public static String getMacAddress(Context context) { //wifi mac地址 WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); String mac = info.getMacAddress(); return mac; } /** * 获取 开机时间 */ public static String getBootTimeString() { long ut = SystemClock.elapsedRealtime() / 1000; int h = (int) ((ut / 3600)); int m = (int) ((ut / 60) % 60); return h + ":" + m; } }
手机信息采集
最新推荐文章于 2023-12-10 23:16:36 发布