Android系统信息获取 之十:移动网络相关信息获取

来源:互联网 发布:软路由没有wan端口 编辑:程序博客网 时间:2024/05/16 05:23

Android平台移动网络信息主要是通过TelephonyManager类来获取的,通过前面对TelephonyManager的观察Android系统信息获取 之九:TelephonyManager类,我们能够发现通过TelephonyManager我们可以获取大概五类信息,分别是:

一、 数据连接状态 

二、 移动网络类型 

三、 手机制式类型 

四、 SIM卡状态 

五、其它信息 

具体信息获取如下:

[java] view plain copy
  1. // 获取telephony系统服务,用于取得SIM卡和网络相关信息  
  2. mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  
  3.   
  4.   
  5.   /**    
  6.    * 电话状态:    
  7.    * 1.tm.CALL_STATE_IDLE=0          无活动    
  8.    * 2.tm.CALL_STATE_RINGING=1  响铃    
  9.    * 3.tm.CALL_STATE_OFFHOOK=2  摘机    
  10.    */      
  11. mTelephonyManager.getCallState();//int       
  12.          
  13.   /**    
  14.    * 电话方位:    
  15.    * 返回当前移动终端的位置   
  16.    */      
  17. mTelephonyManager.getCellLocation();//CellLocation      
  18.   
  19. /**  
  20.  * 请求位置更新,如果更新将产生广播, 
  21.  * 接收对象为注册LISTEN_CELL_LOCATION的对象, 
  22.  * 需要的permission名称为ACCESS_COARSE_LOCATION。 
  23.  */  
  24. CellLocation location = mTelephonyManager.getCellLocation();//CellLocation      
  25.   location.requestLocationUpdate();  
  26.   
  27.         
  28.   /** 
  29.    * 获取数据活动状态 
  30.    *  
  31.    * DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据 
  32.    * DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据 
  33.    * DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据 
  34.    * DATA_ACTIVITY_NONE 数据连接状态:活动,但无数据发送和接受 
  35.    */  
  36.       mTelephonyManager.getDataActivity();  
  37.   /** 
  38.    * 获取数据连接状态 
  39.    *  
  40.    * DATA_CONNECTED 数据连接状态:已连接 
  41.    * DATA_CONNECTING 数据连接状态:正在连接 
  42.    * DATA_DISCONNECTED 数据连接状态:断开 
  43.    * DATA_SUSPENDED 数据连接状态:暂停 
  44.    */  
  45.       mTelephonyManager.getDataState();  
  46.   
  47.          
  48.   /**    
  49.    * 唯一的设备ID:    
  50.    * GSM手机的 IMEI 和 CDMA手机的 MEID.     
  51.    * Return null if device ID is not available.    
  52.    */      
  53. mTelephonyManager.getDeviceId();//String       
  54.          
  55.   /*    
  56.    * 设备的软件版本号:   
  57.    * 返回移动终端的软件版本,例如:GSM手机的IMEI/SV码。  
  58.    * 例如:the IMEI/SV(software version) for GSM phones.    
  59.    * Return null if the software version is not available.     
  60.    */      
  61. mTelephonyManager.getDeviceSoftwareVersion();//String       
  62.          
  63.   /*    
  64.    * 手机号: 
  65.    * 返回手机号码,对于GSM网络来说即MSISDN    
  66.    * GSM手机的 MSISDN.    
  67.    * Return null if it is unavailable.     
  68.    */      
  69. mTelephonyManager.getLine1Number();//String       
  70.   
  71.   /**    
  72.    * 附近的电话的信息: 
  73.    * 返回当前移动终端附近移动终端的信息    
  74.    * 类型:List<NeighboringCellInfo>     
  75.    * 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES    
  76.    */      
  77. mTelephonyManager.getNeighboringCellInfo();//List<NeighboringCellInfo>     
  78.   
  79.       List<NeighboringCellInfo> infos=mTelephonyManager.getNeighboringCellInfo();  
  80.       for(NeighboringCellInfo info:infos){  
  81.           //获取邻居小区号  
  82.         int cid=info.getCid();  
  83.           //获取邻居小区LAC,LAC: 位置区域码。为了确定移动台的位置,每个GSM/PLMN的覆盖区都被划分成许多位置区,LAC则用于标识不同的位置区。  
  84.           info.getLac();  
  85.           info.getNetworkType();  
  86.           info.getPsc();  
  87.           //获取邻居小区信号强度    
  88.           info.getRssi();  
  89.       }  
  90.          
  91.   /**    
  92.    * 获取ISO标准的国家码,即国际长途区号。    
  93.    * 注意:仅当用户已在网络注册后有效。    
  94.    *       在CDMA网络中结果也许不可靠。    
  95.    */      
  96. mTelephonyManager.getNetworkCountryIso();//String       
  97.          
  98.   /**    
  99.    * MCC+MNC(mobile country code + mobile network code)  
  100.    * 返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)   
  101.    * 注意:仅当用户已在网络注册时有效。    
  102.    *    在CDMA网络中结果也许不可靠。    
  103.    */      
  104. mTelephonyManager.getNetworkOperator();//String       
  105.          
  106.   /** 
  107.    * 返回移动网络运营商的名字(SPN)    
  108.    * 按照字母次序的current registered operator(当前已注册的用户)的名字    
  109.    * 注意:仅当用户已在网络注册时有效。    
  110.    *      在CDMA网络中结果也许不可靠。    
  111.    */      
  112. mTelephonyManager.getNetworkOperatorName();//String       
  113.          
  114.   /**    
  115.    * 当前使用的网络类型:    
  116.    * 例如: NETWORK_TYPE_UNKNOWN  网络类型未知  0    
  117.    *  NETWORK_TYPE_GPRS     GPRS网络  1    
  118.    *  NETWORK_TYPE_EDGE     EDGE网络  2    
  119.    *  NETWORK_TYPE_UMTS     UMTS网络  3    
  120.    *  NETWORK_TYPE_HSDPA    HSDPA网络  8     
  121.    *  NETWORK_TYPE_HSUPA    HSUPA网络  9    
  122.    *  NETWORK_TYPE_HSPA     HSPA网络  10    
  123.    *  NETWORK_TYPE_CDMA     CDMA网络,IS95A 或 IS95B.  4    
  124.    *  NETWORK_TYPE_EVDO_0   EVDO网络, revision 0.  5    
  125.    *  NETWORK_TYPE_EVDO_A   EVDO网络, revision A.  6    
  126.    *  NETWORK_TYPE_1xRTT    1xRTT网络  7    
  127.    *   
  128.    *  在中国,联通的3G为UMTS或HSDPA, 
  129.    *  移动和联通的2G为GPRS或EGDE, 
  130.    *  电信的2G为CDMA,电信的3G为EVDO 
  131.    */      
  132. mTelephonyManager.getNetworkType();//int       
  133.          
  134.   /** 
  135.    * 返回移动终端的类型    
  136.    * 手机类型:    
  137.    * 例如: PHONE_TYPE_NONE  无信号  ,手机制式未知  
  138.      PHONE_TYPE_GSM   GSM信号  ,手机制式为GSM,移动和联通 
  139.      PHONE_TYPE_CDMA  CDMA信号 ,手机制式为CDMA,电信    
  140.    */      
  141. mTelephonyManager.getPhoneType();//int       
  142.          
  143.   /** 
  144.    * 返回SIM卡提供商的国家代码    
  145.    * Returns the ISO country code equivalent for the SIM provider's country code.    
  146.    * 获取ISO国家码,相当于提供SIM卡的国家码。    
  147.    *     
  148.    */      
  149. mTelephonyManager.getSimCountryIso();//String       
  150.          
  151.   /** 
  152.    * 返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)    
  153.    * Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits.    
  154.    * 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.    
  155.    * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).    
  156.    */      
  157. mTelephonyManager.getSimOperator();//String       
  158.          
  159.   /**    
  160.    * 服务商名称:    
  161.    * 例如:中国移动、联通    
  162.    * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).    
  163.    */      
  164. mTelephonyManager.getSimOperatorName();//String       
  165.          
  166.   /** 
  167.    * 返回SIM卡的序列号(IMEI)    
  168.    * SIM卡的序列号:    
  169.    * 需要权限:READ_PHONE_STATE    
  170.    */      
  171. mTelephonyManager.getSimSerialNumber();//String       
  172.          
  173.   /**    
  174.    * SIM的状态信息:    
  175.    * SIM_STATE_UNKNOWN          未知状态 0    
  176.    * SIM_STATE_ABSENT           没插卡 1    
  177.    * SIM_STATE_PIN_REQUIRED     锁定状态,需要用户的PIN码解锁 2    
  178.    * SIM_STATE_PUK_REQUIRED     锁定状态,需要用户的PUK码解锁 3    
  179.    * SIM_STATE_NETWORK_LOCKED   锁定状态,需要网络的PIN码解锁 4    
  180.    * SIM_STATE_READY            就绪状态 5    
  181.    */      
  182. mTelephonyManager.getSimState();//int       
  183.          
  184.   /** 
  185.    * 返回用户唯一标识,比如GSM网络的IMSI编号    
  186.    * 唯一的用户ID:    
  187.    * 例如:IMSI(国际移动用户识别码) for a GSM phone.    
  188.    * 需要权限:READ_PHONE_STATE    
  189.    */      
  190. mTelephonyManager.getSubscriberId();//String       
  191.          
  192.   /** 
  193.    * 获取语音信箱号码关联的字母标识。     
  194.    * 取得和语音邮件相关的标签,即为识别符    
  195.    * 需要权限:READ_PHONE_STATE    
  196.    */      
  197. mTelephonyManager.getVoiceMailAlphaTag();//String       
  198.          
  199.   /** 
  200.    * 返回语音邮件号码    
  201.    * 获取语音邮件号码:    
  202.    * 需要权限:READ_PHONE_STATE    
  203.    */      
  204. mTelephonyManager.getVoiceMailNumber();//String       
  205.          
  206.   /**    
  207.    * ICC卡是否存在    
  208.    */      
  209. mTelephonyManager.hasIccCard();//boolean       
  210.          
  211.   /**    
  212.    * 是否漫游:    
  213.    * (在GSM用途下)    
  214.    */      
  215. mTelephonyManager.isNetworkRoaming();//   

具体获取的信息太多,封装了一个工具类,供大家参考使用

下载地址如下:移动网络信息获取工具类


注意使用的时候要在AndroidManifest.xml添加相应的权限

[html] view plain copy
  1.    <!-- 查看网络信息时需要以下权限 -->  
  2. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>  
  4.  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  5.    <span style="white-space:pre">   </span><uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  6. <!-- 设置APN时需要上面的ACCESS_NETWORK_STATE及以下权限 -->  
  7. <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>  
  8. <uses-permission android:name="android.permission.INTERNET"></uses-permission>  
  9. <!-- 设置网络类型时将要使用 -->  
  10. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
0 0