android 获取imei(国际移动设备身份码)号码详解及其应用场景

本文主要是介绍android 获取imei(国际移动设备身份码)号码详解及其应用场景,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IMEI简介:

IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。

IMEI俗称“串号”,存储在手机的EEPROM(俗称“码片”)里,熟悉并了解这个号码对我们今后识别手机会起到非常大的作用。首先TAC码(IMEI的前六位数字)前三位在不同的时期会发生变化,过去的TAC码前三位在现在的手机上不会出现。过去的一些老型号的手机基本上都是446/448开头,如moto v328 nokia 7110,而且即使同一部手机在不同的时期也会有不同的TAC码,如大家最熟悉的8210升级8250。如果前三位是448902就不能升级,因为CPU不同。因此过去所说的只要是同一型号的手机TAC码一定一样的说法是不够准确的,再如爱立信的同一型号手机T39MC在不同地区的地方亦会有不同的号码:大陆行货为520406,香港则为520407。我们知道这些区别后就可以通过TAC码来进行“设备识别”了,而不必去费心的去牢记IMEI的七、八位数字代表的产地。

IMEI分配:

IMEI码由GSM(全球移动通信协会)统一分配,授权BABT(英国通信认证管理委员会)审受

IMEI的组成:

IMEI由15位数字组成,其组成为:  1、前6位数(TAC,Type Approval Code)是"型号核准号码",一般代表机型

2、接着的2位数(FAC,Final Assembly C ode)是"最后装配号",一般代表产地

3、之后的6位数(SNR)是"串号",一般代表生产顺序号

4、最后1位数(SP)通常是"0",为检验码,目前暂备用。

IMEI码具有唯一性,贴在手机背面的标志上,并且读写于手机内存中。它也是该手机在厂家的"档案"和"身份证号"。

应用场景:

我们在应用程序需要对用户提交的信息加密时,由于手机的IMEI号码是唯一的(相当于身份证或者指纹的作用),所以我们进行加密的时候可以在需要加密的信息后加上手机的IMEI号码,从而加大算法的复杂度.


android 获取 imei号码

核心代码:

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

1.加入权限

在manifest.xml文件中要添加:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

2.代码

    /**   *   **   */    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();//     }     }  





这篇关于android 获取imei(国际移动设备身份码)号码详解及其应用场景的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/792803

相关文章

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁