手机中IMEI号的获取

 手机的设备信息,是我们在做证书验证的时候不可缺少的,这里我会写一些我们常用的手机信息获取办法。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方法的介绍                            

[java]  view plain  copy
  1. /**   
  2. *   
  3. *@author dingran   
  4. *创建日期 2010-4-29 下午05:02:47   
  5. *   
  6. */    
  7. package net.sunniwell.app;     
  8. import android.app.Activity;     
  9. import android.os.Bundle;     
  10. import android.telephony.CellLocation;     
  11. import android.telephony.PhoneStateListener;     
  12. import android.telephony.TelephonyManager;     
  13. public class TelManager extends Activity {     
  14.     
  15. @Override    
  16. protected void onCreate(Bundle savedInstanceState) {     
  17.   super.onCreate(savedInstanceState);     
  18.   TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);     
  19.        
  20.   /*   
  21.    * 电话状态:   
  22.    * 1.tm.CALL_STATE_IDLE=0          无活动   
  23.    * 2.tm.CALL_STATE_RINGING=1  响铃   
  24.    * 3.tm.CALL_STATE_OFFHOOK=2  摘机   
  25.    */    
  26.   tm.getCallState();//int     
  27.        
  28.   /*   
  29.    * 电话方位:   
  30.    *    
  31.    */    
  32.   tm.getCellLocation();//CellLocation     
  33.        
  34.   /*   
  35.    * 唯一的设备ID:   
  36.    * GSM手机的 IMEI 和 CDMA手机的 MEID.    
  37.    * Return null if device ID is not available.   
  38.    */    
  39.   tm.getDeviceId();//String     
  40.        
  41.   /*   
  42.    * 设备的软件版本号:   
  43.    * 例如:the IMEI/SV(software version) for GSM phones.   
  44.    * Return null if the software version is not available.    
  45.    */    
  46.   tm.getDeviceSoftwareVersion();//String     
  47.        
  48.   /*   
  49.    * 手机号:   
  50.    * GSM手机的 MSISDN.   
  51.    * Return null if it is unavailable.    
  52.    */    
  53.   tm.getLine1Number();//String     
  54.        
  55.   /*   
  56.    * 附近的电话的信息:   
  57.    * 类型:List<NeighboringCellInfo>    
  58.    * 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES   
  59.    */    
  60.   tm.getNeighboringCellInfo();//List<NeighboringCellInfo>     
  61.        
  62.   /*   
  63.    * 获取ISO标准的国家码,即国际长途区号。   
  64.    * 注意:仅当用户已在网络注册后有效。   
  65.    *       在CDMA网络中结果也许不可靠。   
  66.    */    
  67.   tm.getNetworkCountryIso();//String     
  68.        
  69.   /*   
  70.    * MCC+MNC(mobile country code + mobile network code)   
  71.    * 注意:仅当用户已在网络注册时有效。   
  72.    *    在CDMA网络中结果也许不可靠。   
  73.    */    
  74.   tm.getNetworkOperator();//String     
  75.        
  76.   /*   
  77.    * 按照字母次序的current registered operator(当前已注册的用户)的名字   
  78.    * 注意:仅当用户已在网络注册时有效。   
  79.    *    在CDMA网络中结果也许不可靠。   
  80.    */    
  81.   tm.getNetworkOperatorName();//String     
  82.        
  83.   /*   
  84.    * 当前使用的网络类型:   
  85.    * 例如: NETWORK_TYPE_UNKNOWN  网络类型未知  0   
  86.      NETWORK_TYPE_GPRS     GPRS网络  1   
  87.      NETWORK_TYPE_EDGE     EDGE网络  2   
  88.      NETWORK_TYPE_UMTS     UMTS网络  3   
  89.      NETWORK_TYPE_HSDPA    HSDPA网络  8    
  90.      NETWORK_TYPE_HSUPA    HSUPA网络  9   
  91.      NETWORK_TYPE_HSPA     HSPA网络  10   
  92.      NETWORK_TYPE_CDMA     CDMA网络,IS95A 或 IS95B.  4   
  93.      NETWORK_TYPE_EVDO_0   EVDO网络, revision 0.  5   
  94.      NETWORK_TYPE_EVDO_A   EVDO网络, revision A.  6   
  95.      NETWORK_TYPE_1xRTT    1xRTT网络  7   
  96.    */    
  97.   tm.getNetworkType();//int     
  98.        
  99.   /*   
  100.    * 手机类型:   
  101.    * 例如: PHONE_TYPE_NONE  无信号   
  102.      PHONE_TYPE_GSM   GSM信号   
  103.      PHONE_TYPE_CDMA  CDMA信号   
  104.    */    
  105.   tm.getPhoneType();//int     
  106.        
  107.   /*   
  108.    * Returns the ISO country code equivalent for the SIM provider's country code.   
  109.    * 获取ISO国家码,相当于提供SIM卡的国家码。   
  110.    *    
  111.    */    
  112.   tm.getSimCountryIso();//String     
  113.        
  114.   /*   
  115.    * Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits.   
  116.    * 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.   
  117.    * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).   
  118.    */    
  119.   tm.getSimOperator();//String     
  120.        
  121.   /*   
  122.    * 服务商名称:   
  123.    * 例如:中国移动、联通   
  124.    * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).   
  125.    */    
  126.   tm.getSimOperatorName();//String     
  127.        
  128.   /*   
  129.    * SIM卡的序列号:   
  130.    * 需要权限:READ_PHONE_STATE   
  131.    */    
  132.   tm.getSimSerialNumber();//String     
  133.        
  134.   /*   
  135.    * SIM的状态信息:   
  136.    *  SIM_STATE_UNKNOWN          未知状态 0   
  137.    SIM_STATE_ABSENT           没插卡 1   
  138.    SIM_STATE_PIN_REQUIRED     锁定状态,需要用户的PIN码解锁 2   
  139.    SIM_STATE_PUK_REQUIRED     锁定状态,需要用户的PUK码解锁 3   
  140.    SIM_STATE_NETWORK_LOCKED   锁定状态,需要网络的PIN码解锁 4   
  141.    SIM_STATE_READY            就绪状态 5   
  142.    */    
  143.   tm.getSimState();//int     
  144.        
  145.   /*   
  146.    * 唯一的用户ID:   
  147.    * 例如:IMSI(国际移动用户识别码) for a GSM phone.   
  148.    * 需要权限:READ_PHONE_STATE   
  149.    */    
  150.   tm.getSubscriberId();//String     
  151.        
  152.   /*   
  153.    * 取得和语音邮件相关的标签,即为识别符   
  154.    * 需要权限:READ_PHONE_STATE   
  155.    */    
  156.   tm.getVoiceMailAlphaTag();//String     
  157.        
  158.   /*   
  159.    * 获取语音邮件号码:   
  160.    * 需要权限:READ_PHONE_STATE   
  161.    */    
  162.   tm.getVoiceMailNumber();//String     
  163.        
  164.   /*   
  165.    * ICC卡是否存在   
  166.    */    
  167.   tm.hasIccCard();//boolean     
  168.        
  169.   /*   
  170.    * 是否漫游:   
  171.    * (在GSM用途下)   
  172.    */    
  173.   tm.isNetworkRoaming();//     
  174.        
  175. }     
  176.     
  177. }   
3程序中方法并打印信息                                        

[java]  view plain  copy
  1. package com.example.asd;     
  2.     
  3. import java.util.List;     
  4.     
  5. import android.app.Activity;     
  6. import android.os.Bundle;     
  7. import android.telephony.CellLocation;     
  8. import android.telephony.NeighboringCellInfo;     
  9. import android.telephony.TelephonyManager;     
  10. import android.util.Log;     
  11.     
  12. public class MainActivity extends Activity {     
  13.     
  14.         
  15.     private TelephonyManager telMgr;     
  16.     
  17.     @Override    
  18.     public void onCreate(Bundle savedInstanceState) {     
  19.         super.onCreate(savedInstanceState);     
  20.         setContentView(R.layout.activity_main);     
  21.     
  22.         telMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);     
  23.     
  24.         if (telMgr.getSimState() == telMgr.SIM_STATE_READY) {     
  25.             Log.i("MyList""良好");     
  26.         } else if (telMgr.getSimState() == telMgr.SIM_STATE_ABSENT) {     
  27.             Log.i("MyList""无SIM卡");     
  28.         } else {     
  29.             Log.i("MyList""SIM卡被锁定或未知的状态");     
  30.         }     
  31.     
  32.         Log.i("MyList""电话状态[0 无活动/1 响铃/2 摘机]:" + getCallState());     
  33.         Log.i("MyList""电话方位:" + getCellLocation());     
  34.         Log.i("MyList""唯一的设备ID:" + getDeviceId());     
  35.         Log.i("MyList""设备的软件版本号:" + getDeviceSoftwareVersion());     
  36.         Log.i("MyList""手机号:" + getLine1Number());     
  37.         Log.i("MyList""附近的电话的信息:" + getNeighboringCellInfo());     
  38.         Log.i("MyList""获取ISO标准的国家码,即国际长途区号:" + getNetworkCountryIso());     
  39.         Log.i("MyList""MCC+MNC:" + getNetworkOperator());     
  40.         Log.i("MyList""(当前已注册的用户)的名字:" + getNetworkOperatorName());     
  41.         Log.i("MyList""当前使用的网络类型:" + getNetworkType());     
  42.         Log.i("MyList""手机类型:" + getPhoneType());     
  43.         Log.i("MyList""SIM卡的国家码:" + getSimCountryIso());     
  44.         Log.i("MyList""获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字:" + getSimOperator());     
  45.         Log.i("MyList""服务商名称:" + getSimOperatorName());     
  46.         Log.i("MyList""SIM卡的序列号:" + getSimSerialNumber());     
  47.         Log.i("MyList""SIM的状态信息:" + getSimState());     
  48.         Log.i("MyList""唯一的用户ID:" + getSubscriberId());     
  49.         Log.i("MyList""取得和语音邮件相关的标签,即为识别符:" + getVoiceMailAlphaTag());     
  50.         Log.i("MyList""获取语音邮件号码:" + getVoiceMailNumber());     
  51.         Log.i("MyList""ICC卡是否存在:" + hasIccCard());     
  52.         Log.i("MyList""是否漫游:" + isNetworkRoaming());     
  53.         Log.i("MyList""获取数据活动状态:" + getDataActivity());     
  54.         Log.i("MyList""获取数据连接状态:" + getDataState());     
  55.     
  56.         // telMgr.listen(PhoneStateListener listener, int events) ;     
  57.         // 解释:     
  58.         // IMSI是国际移动用户识别码的简称(International Mobile Subscriber Identity)     
  59.         // IMSI共有15位,其结构如下:     
  60.         // MCC+MNC+MIN     
  61.         // MCC:Mobile Country Code,移动国家码,共3位,中国为460;     
  62.         // MNC:Mobile NetworkCode,移动网络码,共2位     
  63.         // 在中国,移动的代码为电00和02,联通的代码为01,电信的代码为03     
  64.         // 合起来就是(也是Android手机中APN配置文件中的代码):     
  65.         // 中国移动:46000 46002     
  66.         // 中国联通:46001     
  67.         // 中国电信:46003     
  68.         // 举例,一个典型的IMSI号码为460030912121001     
  69.         // IMEI是International Mobile Equipment Identity (国际移动设备标识)的简称     
  70.         // IMEI由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的     
  71.         // 其组成为:     
  72.         // 1. 前6位数(TAC)是”型号核准号码”,一般代表机型     
  73.         // 2. 接着的2位数(FAC)是”最后装配号”,一般代表产地     
  74.         // 3. 之后的6位数(SNR)是”串号”,一般代表生产顺序号     
  75.         // 4. 最后1位数(SP)通常是”0″,为检验码,目前暂备用     
  76.     }     
  77.     
  78.         
  79.     private int getCallState() {     
  80.         return telMgr.getCallState();     
  81.     }     
  82.     
  83.         
  84.     private CellLocation getCellLocation() {     
  85.         CellLocation location = telMgr.getCellLocation();     
  86.     
  87.         // 请求位置更新,如果更新将产生广播,接收对象为注册LISTEN_CELL_LOCATION的对象,需要的permission名称为ACCESS_COARSE_LOCATION。     
  88.         // location.requestLocationUpdate();     
  89.     
  90.         return location;     
  91.     }     
  92.     
  93.         
  94.     private String getDeviceId() {     
  95.         return telMgr.getDeviceId();     
  96.     }     
  97.     
  98.         
  99.     private String getDeviceSoftwareVersion() {     
  100.         return telMgr.getDeviceSoftwareVersion();     
  101.     }     
  102.     
  103.         
  104.     private String getLine1Number() {     
  105.         return telMgr.getLine1Number();     
  106.     }     
  107.     
  108.         
  109.     private List<NeighboringCellInfo> getNeighboringCellInfo() {     
  110.         // List<NeighboringCellInfo> infos = telMgr.getNeighboringCellInfo();     
  111.         // for (NeighboringCellInfo info : infos) {     
  112.         // // 获取邻居小区号     
  113.         // int cid = info.getCid();     
  114.         //     
  115.         // // 获取邻居小区LAC,LAC:     
  116.         // // 位置区域码。为了确定移动台的位置,每个GSM/PLMN的覆盖区都被划分成许多位置区,LAC则用于标识不同的位置区。     
  117.         // info.getLac();     
  118.         // info.getNetworkType();     
  119.         // info.getPsc();     
  120.         //     
  121.         // // 获取邻居小区信号强度     
  122.         // info.getRssi();     
  123.         // }     
  124.     
  125.         return telMgr.getNeighboringCellInfo();     
  126.     }     
  127.     
  128.         
  129.     private String getNetworkCountryIso() {     
  130.         return telMgr.getNetworkCountryIso();     
  131.     }     
  132.     
  133.         
  134.     private String getNetworkOperator() {     
  135.         return telMgr.getNetworkOperator();     
  136.     }     
  137.     
  138.         
  139.     private String getNetworkOperatorName() {     
  140.         return telMgr.getNetworkOperatorName();     
  141.     }     
  142.     
  143.         
  144.     private int getNetworkType() {     
  145.         return telMgr.getNetworkType();     
  146.     }     
  147.     
  148.         
  149.     private int getPhoneType() {     
  150.         return telMgr.getPhoneType();     
  151.     }     
  152.     
  153.         
  154.     private String getSimCountryIso() {     
  155.         return telMgr.getSimCountryIso();     
  156.     }     
  157.     
  158.         
  159.     private String getSimOperator() {     
  160.         return telMgr.getSimOperator();     
  161.     }     
  162.     
  163.         
  164.     private String getSimOperatorName() {     
  165.         return telMgr.getSimOperatorName();     
  166.     }     
  167.     
  168.         
  169.     private String getSimSerialNumber() {     
  170.         return telMgr.getSimSerialNumber();     
  171.     }     
  172.     
  173.         
  174.     private int getSimState() {     
  175.         return telMgr.getSimState();     
  176.     }     
  177.     
  178.         
  179.     private String getSubscriberId() {     
  180.         return telMgr.getSubscriberId();     
  181.     }     
  182.     
  183.         
  184.     private String getVoiceMailAlphaTag() {     
  185.         return telMgr.getVoiceMailAlphaTag();     
  186.     }     
  187.     
  188.         
  189.     private String getVoiceMailNumber() {     
  190.         return telMgr.getVoiceMailNumber();     
  191.     }     
  192.     
  193.         
  194.     private boolean hasIccCard() {     
  195.         return telMgr.hasIccCard();     
  196.     }     
  197.     
  198.         
  199.     private boolean isNetworkRoaming() {     
  200.         return telMgr.isNetworkRoaming();     
  201.     }     
  202.     
  203.         
  204.     private int getDataActivity() {     
  205.         return telMgr.getDataActivity();     
  206.     }     
  207.     
  208.         
  209.     private int getDataState() {     
  210.         return telMgr.getDataState();     
  211.     }     
  212.     
  213. }    
在manifest.xml文件中打开:

[java]  view plain  copy
  1. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
  2. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
最后附上我的logout信息:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值