手机的imei号的获取

article/2025/11/6 16:20:00

    手机的设备信息,是我们在做证书验证的时候不可缺少的,这里我会写一些我们常用的手机信息获取办法。TelephonyManager是我们手机管理的一个大的类,继承的Object。

1核心代码和权限                                        

 Context.getSystemService(Context.TELEPHONY_SERVICE)

如:Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getDeviceId();

在manifest.xml文件中要添加 <uses-permission android:name="android.permission.READ_PHONE_STATE" />

2TelephoneManager方法的介绍                            

/**  
*  
*@author dingran  
*创建日期 2010-4-29 下午05:02:47  
*  
*/  
package net.sunniwell.app;   
import android.app.Activity;   
import android.os.Bundle;   
import android.telephony.CellLocation;   
import android.telephony.PhoneStateListener;   
import android.telephony.TelephonyManager;   
public class TelManager extends Activity {   @Override  
protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);   /*  * 电话状态:  * 1.tm.CALL_STATE_IDLE=0          无活动  * 2.tm.CALL_STATE_RINGING=1  响铃  * 3.tm.CALL_STATE_OFFHOOK=2  摘机  */  tm.getCallState();//int   /*  * 电话方位:  *   */  tm.getCellLocation();//CellLocation   /*  * 唯一的设备ID:  * GSM手机的 IMEI 和 CDMA手机的 MEID.   * Return null if device ID is not available.  */  tm.getDeviceId();//String   /*  * 设备的软件版本号:  * 例如:the IMEI/SV(software version) for GSM phones.  * Return null if the software version is not available.   */  tm.getDeviceSoftwareVersion();//String   /*  * 手机号:  * GSM手机的 MSISDN.  * Return null if it is unavailable.   */  tm.getLine1Number();//String   /*  * 附近的电话的信息:  * 类型:List<NeighboringCellInfo>   * 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES  */  tm.getNeighboringCellInfo();//List<NeighboringCellInfo>   /*  * 获取ISO标准的国家码,即国际长途区号。  * 注意:仅当用户已在网络注册后有效。  *       在CDMA网络中结果也许不可靠。  */  tm.getNetworkCountryIso();//String   /*  * MCC+MNC(mobile country code + mobile network code)  * 注意:仅当用户已在网络注册时有效。  *    在CDMA网络中结果也许不可靠。  */  tm.getNetworkOperator();//String   /*  * 按照字母次序的current registered operator(当前已注册的用户)的名字  * 注意:仅当用户已在网络注册时有效。  *    在CDMA网络中结果也许不可靠。  */  tm.getNetworkOperatorName();//String   /*  * 当前使用的网络类型:  * 例如: NETWORK_TYPE_UNKNOWN  网络类型未知  0  NETWORK_TYPE_GPRS     GPRS网络  1  NETWORK_TYPE_EDGE     EDGE网络  2  NETWORK_TYPE_UMTS     UMTS网络  3  NETWORK_TYPE_HSDPA    HSDPA网络  8   NETWORK_TYPE_HSUPA    HSUPA网络  9  NETWORK_TYPE_HSPA     HSPA网络  10  NETWORK_TYPE_CDMA     CDMA网络,IS95A 或 IS95B.  4  NETWORK_TYPE_EVDO_0   EVDO网络, revision 0.  5  NETWORK_TYPE_EVDO_A   EVDO网络, revision A.  6  NETWORK_TYPE_1xRTT    1xRTT网络  7  */  tm.getNetworkType();//int   /*  * 手机类型:  * 例如: PHONE_TYPE_NONE  无信号  PHONE_TYPE_GSM   GSM信号  PHONE_TYPE_CDMA  CDMA信号  */  tm.getPhoneType();//int   /*  * Returns the ISO country code equivalent for the SIM provider's country code.  * 获取ISO国家码,相当于提供SIM卡的国家码。  *   */  tm.getSimCountryIso();//String   /*  * Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits.  * 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.  * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).  */  tm.getSimOperator();//String   /*  * 服务商名称:  * 例如:中国移动、联通  * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).  */  tm.getSimOperatorName();//String   /*  * SIM卡的序列号:  * 需要权限:READ_PHONE_STATE  */  tm.getSimSerialNumber();//String   /*  * SIM的状态信息:  *  SIM_STATE_UNKNOWN          未知状态 0  SIM_STATE_ABSENT           没插卡 1  SIM_STATE_PIN_REQUIRED     锁定状态,需要用户的PIN码解锁 2  SIM_STATE_PUK_REQUIRED     锁定状态,需要用户的PUK码解锁 3  SIM_STATE_NETWORK_LOCKED   锁定状态,需要网络的PIN码解锁 4  SIM_STATE_READY            就绪状态 5  */  tm.getSimState();//int   /*  * 唯一的用户ID:  * 例如:IMSI(国际移动用户识别码) for a GSM phone.  * 需要权限:READ_PHONE_STATE  */  tm.getSubscriberId();//String   /*  * 取得和语音邮件相关的标签,即为识别符  * 需要权限:READ_PHONE_STATE  */  tm.getVoiceMailAlphaTag();//String   /*  * 获取语音邮件号码:  * 需要权限:READ_PHONE_STATE  */  tm.getVoiceMailNumber();//String   /*  * ICC卡是否存在  */  tm.hasIccCard();//boolean   /*  * 是否漫游:  * (在GSM用途下)  */  tm.isNetworkRoaming();//   }   } 
3程序中方法并打印信息                                        

package com.example.asd;   import java.util.List;   import android.app.Activity;   
import android.os.Bundle;   
import android.telephony.CellLocation;   
import android.telephony.NeighboringCellInfo;   
import android.telephony.TelephonyManager;   
import android.util.Log;   public class MainActivity extends Activity {   private TelephonyManager telMgr;   @Override  public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   telMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);   if (telMgr.getSimState() == telMgr.SIM_STATE_READY) {   Log.i("MyList", "良好");   } else if (telMgr.getSimState() == telMgr.SIM_STATE_ABSENT) {   Log.i("MyList", "无SIM卡");   } else {   Log.i("MyList", "SIM卡被锁定或未知的状态");   }   Log.i("MyList", "电话状态[0 无活动/1 响铃/2 摘机]:" + getCallState());   Log.i("MyList", "电话方位:" + getCellLocation());   Log.i("MyList", "唯一的设备ID:" + getDeviceId());   Log.i("MyList", "设备的软件版本号:" + getDeviceSoftwareVersion());   Log.i("MyList", "手机号:" + getLine1Number());   Log.i("MyList", "附近的电话的信息:" + getNeighboringCellInfo());   Log.i("MyList", "获取ISO标准的国家码,即国际长途区号:" + getNetworkCountryIso());   Log.i("MyList", "MCC+MNC:" + getNetworkOperator());   Log.i("MyList", "(当前已注册的用户)的名字:" + getNetworkOperatorName());   Log.i("MyList", "当前使用的网络类型:" + getNetworkType());   Log.i("MyList", "手机类型:" + getPhoneType());   Log.i("MyList", "SIM卡的国家码:" + getSimCountryIso());   Log.i("MyList", "获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字:" + getSimOperator());   Log.i("MyList", "服务商名称:" + getSimOperatorName());   Log.i("MyList", "SIM卡的序列号:" + getSimSerialNumber());   Log.i("MyList", "SIM的状态信息:" + getSimState());   Log.i("MyList", "唯一的用户ID:" + getSubscriberId());   Log.i("MyList", "取得和语音邮件相关的标签,即为识别符:" + getVoiceMailAlphaTag());   Log.i("MyList", "获取语音邮件号码:" + getVoiceMailNumber());   Log.i("MyList", "ICC卡是否存在:" + hasIccCard());   Log.i("MyList", "是否漫游:" + isNetworkRoaming());   Log.i("MyList", "获取数据活动状态:" + getDataActivity());   Log.i("MyList", "获取数据连接状态:" + getDataState());   // telMgr.listen(PhoneStateListener listener, int events) ;   // 解释:   // 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   // IMEI是International Mobile Equipment Identity (国际移动设备标识)的简称   // IMEI由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的   // 其组成为:   // 1. 前6位数(TAC)是”型号核准号码”,一般代表机型   // 2. 接着的2位数(FAC)是”最后装配号”,一般代表产地   // 3. 之后的6位数(SNR)是”串号”,一般代表生产顺序号   // 4. 最后1位数(SP)通常是”0″,为检验码,目前暂备用   }   private int getCallState() {   return telMgr.getCallState();   }   private CellLocation getCellLocation() {   CellLocation location = telMgr.getCellLocation();   // 请求位置更新,如果更新将产生广播,接收对象为注册LISTEN_CELL_LOCATION的对象,需要的permission名称为ACCESS_COARSE_LOCATION。   // location.requestLocationUpdate();   return location;   }   private String getDeviceId() {   return telMgr.getDeviceId();   }   private String getDeviceSoftwareVersion() {   return telMgr.getDeviceSoftwareVersion();   }   private String getLine1Number() {   return telMgr.getLine1Number();   }   private List<NeighboringCellInfo> getNeighboringCellInfo() {   // List<NeighboringCellInfo> infos = telMgr.getNeighboringCellInfo();   // for (NeighboringCellInfo info : infos) {   // // 获取邻居小区号   // int cid = info.getCid();   //   // // 获取邻居小区LAC,LAC:   // // 位置区域码。为了确定移动台的位置,每个GSM/PLMN的覆盖区都被划分成许多位置区,LAC则用于标识不同的位置区。   // info.getLac();   // info.getNetworkType();   // info.getPsc();   //   // // 获取邻居小区信号强度   // info.getRssi();   // }   return telMgr.getNeighboringCellInfo();   }   private String getNetworkCountryIso() {   return telMgr.getNetworkCountryIso();   }   private String getNetworkOperator() {   return telMgr.getNetworkOperator();   }   private String getNetworkOperatorName() {   return telMgr.getNetworkOperatorName();   }   private int getNetworkType() {   return telMgr.getNetworkType();   }   private int getPhoneType() {   return telMgr.getPhoneType();   }   private String getSimCountryIso() {   return telMgr.getSimCountryIso();   }   private String getSimOperator() {   return telMgr.getSimOperator();   }   private String getSimOperatorName() {   return telMgr.getSimOperatorName();   }   private String getSimSerialNumber() {   return telMgr.getSimSerialNumber();   }   private int getSimState() {   return telMgr.getSimState();   }   private String getSubscriberId() {   return telMgr.getSubscriberId();   }   private String getVoiceMailAlphaTag() {   return telMgr.getVoiceMailAlphaTag();   }   private String getVoiceMailNumber() {   return telMgr.getVoiceMailNumber();   }   private boolean hasIccCard() {   return telMgr.hasIccCard();   }   private boolean isNetworkRoaming() {   return telMgr.isNetworkRoaming();   }   private int getDataActivity() {   return telMgr.getDataActivity();   }   private int getDataState() {   return telMgr.getDataState();   }   }  
在manifest.xml文件中打开:

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
最后附上我的logout信息:









http://chatgpt.dhexx.cn/article/LynhxAlG.shtml

相关文章

获取手机唯一识别码IMEI

前言 获取IMEI相信大家非常熟悉&#xff0c;但是项目中使用时&#xff0c;发现当手机卡为电信的时候&#xff0c;获取的并不是IMEI&#xff0c;而是MEID&#xff0c;什么是MEID&#xff0c;为什么会出现这种情况呢&#xff1f; IMEI国际移动设备识别码&#xff08;IMEI&#xf…

IMEI、IMSI、ICCID、SN是什么?意义和区别?通信模组或手机的唯一识别码

最近在做几个4G移动端的产品&#xff0c;初入行门有很多生涩的名词。想获取一个全球唯一ID作为设备后台管理编号&#xff0c;就扯出了 IMEI、IMSI、ICCID、SN 这几个东西。 IMEI IMEI&#xff1a;国际移动设备识别码 &#xff08;International Mobile Equipment Identity&…

ProtcolBuffer基础原理

Protocol Buffer由Google出品的一款轻量而高效的数据序列化和反序列化的方法,下面的我们来介绍一下Protocol Buffer的内部实现原理。 1.类实例 编码包括数据的编解码和函数方法的还原 2.ProtcolBuffer的数据类型 TypeMeaningUsed For0Varintint32, int64, uint32, uint64,…

ADI Blackfin DSP处理器-BF533的开发详解13:LDF内存分配的详解(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 ADSP上的LDF&#xff08;Linker Description Files&#xff09;连接器描述文件是处理器用来进行资源分配的文件&#xff0c;通过对LDF文…

M4内核的FPU/DSP使用总结

FPU简介 近年&#xff0c;在Cortex-M3之后ARM公司又推出Cortex-M4内核&#xff0c;ARM Cortex-M4处理器是由ARM专门开发的最新嵌入式处理器&#xff0c;在M3的基础上强化了运算能力&#xff0c;新加了浮点、DSP、并行计算等。Cortex-M4处理器的最大亮点之一&#xff0c;也是本文…

【STM32F407的DSP教程】第37章 STM32F407的FIR低通滤波器实现(支持逐个数据的实时滤波)

完整版教程下载地址&#xff1a;http://www.armbbs.cn/forum.php?modviewthread&tid94547 第37章 STM32F407的FIR低通滤波器实现&#xff08;支持逐个数据的实时滤波&#xff09; 本章节讲解FIR低通滤波器实现。 目录 37.1 初学者重要提示 37.2 低通滤波器介绍…

【STM32F429的DSP教程】第41章 FIR滤波器的群延迟(重要)

完整版教程下载地址&#xff1a;http://www.armbbs.cn/forum.php?modviewthread&tid94547 第41章 FIR滤波器的群延迟&#xff08;重要&#xff09; 本章节为大家介绍FIR滤波器的群延迟问题。 目录 41.1 FIR滤波后的群延迟 41.2 总结 41.1 FIR滤波后的群延迟 波…

STM32F407 DSP+FPU进行FFT变换(2)

STM32F407 DSPFPU进行FFT变换 接着上一篇继续&#xff0c;要用FFT运算的话&#xff0c;F4有FPU和DSP库&#xff0c;可以很方便让我们去对数据进行傅氏变换。首先得配置好DSP库和FPU。 配置DPS库和FPU CubeMX一般是默认配置开启FPU&#xff0c;但是DSP库需要自己去添加。这里…

【STM32F407的DSP教程】第41章 FIR滤波器的群延迟(重要)

完整版教程下载地址&#xff1a;http://www.armbbs.cn/forum.php?modviewthread&tid94547 第41章 FIR滤波器的群延迟&#xff08;重要&#xff09; 本章节为大家介绍FIR滤波器的群延迟问题。 目录 41.1 FIR滤波后的群延迟 41.2 总结 41.1 FIR滤波后的群延迟 波…

Powell算法、Powell修正算法_matlab仿真

1.鲍威尔基本算法的运算流程 1.采用坐标轮转法顺次沿n个坐标轴方向[e1,e2,...,en]进行一维搜索。然后以初始点X(0)和终点Xn(1)构成一个新的方向S(1)&#xff0c;并以此方向为搜索方向在做一维搜索得到极小值点X(n1)(1)。 2.去初始点X0(2)X(n1)(1)&#xff0c;并去掉元搜索方向组…

SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型(将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab)验证算法可行性和实时性

SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型&#xff08;将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab&#xff09;验证算法可行性和实时性。 对于数字信号处理很有用。 ID:73400638006173885书院街登山的兰瓜

非极大值抑制算法(NMS)及python实现

在目标检测中&#xff0c;常会利用非极大值抑制算法(NMS)对生成的大量候选框进行后处理&#xff0c;去除冗余的候选框&#xff0c;得到最具代表性的结果&#xff0c;以加快目标检测的效率。即如下图所示&#xff0c;消除多余的候选框&#xff0c;找到最佳的bbox。 NMS算法过程…

ADI Blackfin DSP处理器-BF533的开发详解24:触摸屏的实现和应用(含源代码)

硬件准备** ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 使用到硬件模块原理图 功能介绍 四线电阻式触摸屏&#xff0c;拿笔和指甲划拉的&#xff0c;不是现在的容性触摸屏。 ADSP-EDU-BF53x 板卡的 …

ADI Blackfin DSP处理器-BF533的开发详解8:Timer定时器的驱动和应用(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 接口功能介绍 ADSP-BF53x 上有 3 个通用定时器&#xff0c;每个定时器有三种模式&#xff1a; 脉冲宽度调制模式&#xff08;PWM_OUT&#xff0…

【信号处理】CFO估计技术(Matlab代码实现)

目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 针对存在未知载波频偏&#xff08;CFO&#xff09;的线性调制分类&#xff0c;提出一种混合似似然比检测&#xff08;qHLRT&#xff09;分类器。并且通过使用多天线接收机来进一步增强分类性能。一种基于盲源分…

基于STM32F469 discovery kit 开发板的开发2

目录 基于STM32F469 discovery kit 开发板的开发2开发环境搭建keil安装F4的固件库keil配置st-link调试工具例程测试 基于STM32F469 discovery kit 开发板的开发2 开发环境搭建 在嵌入式开发中&#xff0c;常用的集成开发环境&#xff08;IDE&#xff09;常用的有keil或IAR&am…

ADI Blackfin DSP处理器-BF533的开发详解16:KEY按键的实现(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 实现原理 ADSP-EDU-BF53x 开发板上的按键连接到了 CPLD&#xff0c;通过 CPLD 将按键信号与 EBIU 总线和中断管脚 PF0 连接&…

matlab进行傅里叶分析

license需求&#xff1a;需要使用到simulink工具包simscape 1.在matlab的command window中输入power_fftscope命令,并按回车键&#xff0c;该操作会打开FFT分析的窗口 2.加载用于FFT分析的数据到matlab worksapce,该数据需要按照一定的格式显示才能被FFT分析窗口自动识别到。 …

ADI Blackfin DSP处理器-BF533的开发详解18:用触摸屏的例程来理解中断(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 硬件实现原理 ADSP-EDU-BF533 开发板上的中断资源连接到了 CPLD&#xff0c;并通过 CPLD 将中断信号连接到 PF0 触发&#xff0c…

【正点原子FPGA连载】第十三章QSPI Flash读写测试实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十三章QSPI Fl…