*******获取手机设备信息

  1. ** 
  2.  * $Id: TerminalInfo.java,v 1.1 2012/07/16 07:15:00 zhangmh Exp $ 
  3.  * 
  4.  * Copyright (c) 2012 ChinaSoft International, Ltd. All rights reserved 
  5.  * ResourceOne BizAnywhere Project 
  6.  * 
  7.  */  
  8. package com.chinasofti.ro.bizanywhere.mobile.core;  
  9.   
  10. import java.io.IOException;  
  11. import java.io.InputStreamReader;  
  12. import java.io.LineNumberReader;  
  13. import java.util.List;  
  14. import java.util.TimeZone;  
  15.   
  16. import android.app.Activity;  
  17. import android.content.Context;  
  18. import android.location.Location;  
  19. import android.location.LocationManager;  
  20. import android.telephony.CellLocation;  
  21. import android.telephony.NeighboringCellInfo;  
  22. import android.telephony.TelephonyManager;  
  23. import android.util.DisplayMetrics;  
  24.   
  25. /** 
  26.  * @Title: TerminalInfo.java 
  27.  * @Description: <br> 
  28.  *               <br> 
  29.  * @Company: chinasofti 
  30.  * @Created on 2012-6-13 下午6:28:40 
  31.  * @author zhangmh 
  32.  * @version $Revision: 1.1 $ 
  33.  * @since 1.0 
  34.  */  
  35. public class TerminalInfo{  
  36.       
  37.     /** 
  38.      * Product name 
  39.      */  
  40.     public static String PRODUCT_NAME = "ResourceOne-BizAnywhere-client";  
  41.   
  42.     /** 
  43.      * Product version 
  44.      */  
  45.     public static String PRODUCT_VERSION = "v5.0";  
  46.       
  47.     TelephonyManager tm = null;  
  48.     Context context = null;  
  49.     public TerminalInfo(Context context) {  
  50.         this.context = context;  
  51.         tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);  
  52.     }  
  53.     /**   
  54.      * 电话状态:    
  55.      * 1.tm.CALL_STATE_IDLE=0     无活动    
  56.      * 2.tm.CALL_STATE_RINGING=1  响铃    
  57.      * 3.tm.CALL_STATE_OFFHOOK=2  摘机    
  58.      * @return  
  59.      */   
  60.     public int getCallState(){  
  61.         return tm.getCallState();  
  62.     }  
  63.     /**    
  64.      * 电话方位:    
  65.      *    
  66.      */  
  67.     public CellLocation getCellLocation(){  
  68.         return tm.getCellLocation();  
  69.     }  
  70.   
  71.      /**    
  72.      * 唯一的设备ID:    
  73.      * GSM手机的 IMEI 和 CDMA手机的 MEID.    
  74.      * Return null if device ID is not available.    
  75.      */      
  76.     public String getDeviceId(){  
  77.         return tm.getDeviceId();  
  78.     }  
  79.   
  80.     /**    
  81.      * 设备的软件版本号:    
  82.      * 例如:the IMEI/SV(software version) for GSM phones.    
  83.      * Return null if the software version is not available.    
  84.      */     
  85.     public String getDeviceSoftwareVersion(){  
  86.         return tm.getDeviceSoftwareVersion();  
  87.     }  
  88.     /**    
  89.      * 手机号:    
  90.      * GSM手机的 MSISDN.    
  91.      * Return null if it is unavailable.    
  92.      */     
  93.     public String getLine1Number(){  
  94.         return tm.getLine1Number();  
  95.     }  
  96.     /**    
  97.      * 附近的电话的信息:    
  98.      * 类型:List    
  99.      * 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES    
  100.      */    
  101.     public List<NeighboringCellInfo> getNeighboringCellInfo(){  
  102.         return tm.getNeighboringCellInfo();  
  103.     }  
  104.   
  105.     /**    
  106.      * 获取ISO标准的国家码,即国际长途区号。    
  107.      * 注意:仅当用户已在网络注册后有效。    
  108.      *       在CDMA网络中结果也许不可靠。    
  109.      */      
  110.     public String getNetworkCountryIso(){  
  111.         return tm.getNetworkCountryIso();  
  112.     }  
  113.   
  114.     /**    
  115.      * MCC+MNC(mobile country code + mobile network code)    
  116.      * 注意:仅当用户已在网络注册时有效。    
  117.      *    在CDMA网络中结果也许不可靠。    
  118.      */     
  119.     public String getNetworkOperator(){  
  120.         return tm.getNetworkOperator();  
  121.     }  
  122.   
  123.     /**    
  124.      * 按照字母次序的current registered operator(当前已注册的用户)的名字    
  125.      * 注意:仅当用户已在网络注册时有效。    
  126.      *    在CDMA网络中结果也许不可靠。    
  127.      */      
  128.     public String getNetworkOperatorName(){  
  129.         return tm.getNetworkOperatorName();  
  130.     }  
  131.   
  132.     /**    
  133.      * 当前使用的网络类型:    
  134.      * 例如: NETWORK_TYPE_UNKNOWN  网络类型未知  0    
  135.        NETWORK_TYPE_GPRS     GPRS网络  1    
  136.        NETWORK_TYPE_EDGE     EDGE网络  2    
  137.        NETWORK_TYPE_UMTS     UMTS网络  3    
  138.        NETWORK_TYPE_HSDPA    HSDPA网络  8    
  139.        NETWORK_TYPE_HSUPA    HSUPA网络  9    
  140.        NETWORK_TYPE_HSPA     HSPA网络  10    
  141.        NETWORK_TYPE_CDMA     CDMA网络,IS95A 或 IS95B.  4    
  142.        NETWORK_TYPE_EVDO_0   EVDO网络, revision 0.  5    
  143.        NETWORK_TYPE_EVDO_A   EVDO网络, revision A.  6    
  144.        NETWORK_TYPE_1xRTT    1xRTT网络  7    
  145.      */      
  146.      public int getNetworkType(){  
  147.          return tm.getNetworkType();  
  148.      }  
  149.   
  150.     /**    
  151.      * 手机类型:    
  152.      * 例如: PHONE_TYPE_NONE  无信号    
  153.        PHONE_TYPE_GSM   GSM信号    
  154.        PHONE_TYPE_CDMA  CDMA信号    
  155.      */      
  156.     public int getPhoneType(){  
  157.         return tm.getPhoneType();  
  158.     }  
  159.   
  160.      /**    
  161.      * Returns the ISO country code equivalent for the SIM provider's country code.    
  162.      * 获取ISO国家码,相当于提供SIM卡的国家码。    
  163.      *    
  164.      */    
  165.     public String getSimCountryIso(){  
  166.         return tm.getSimCountryIso();  
  167.     }  
  168.   
  169.     /**    
  170.      * Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits.    
  171.      * 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.    
  172.      * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).    
  173.      */      
  174.     public String getSimOperator(){  
  175.         return tm.getSimOperator();    
  176.     }  
  177.   
  178.      /**    
  179.      * 服务商名称:    
  180.      * 例如:中国移动、联通    
  181.      * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).    
  182.      */      
  183.     public String getSimOperatorName(){  
  184.         return tm.getSimOperatorName();  
  185.     }  
  186.   
  187.     /**    
  188.      * SIM卡的序列号:    
  189.      * 需要权限:READ_PHONE_STATE    
  190.      */      
  191.     public String getSimSerialNumber(){  
  192.         return tm.getSimSerialNumber();  
  193.     }  
  194.   
  195.     /**    
  196.      * SIM的状态信息:    
  197.      SIM_STATE_UNKNOWN          未知状态 0    
  198.      SIM_STATE_ABSENT           没插卡 1    
  199.      SIM_STATE_PIN_REQUIRED     锁定状态,需要用户的PIN码解锁 2    
  200.      SIM_STATE_PUK_REQUIRED     锁定状态,需要用户的PUK码解锁 3    
  201.      SIM_STATE_NETWORK_LOCKED   锁定状态,需要网络的PIN码解锁 4    
  202.      SIM_STATE_READY            就绪状态 5    
  203.      */      
  204.     public int getSimState(){  
  205.         return tm.getSimState();  
  206.     }  
  207.     /**    
  208.      * 唯一的用户ID:    
  209.      * 例如:IMSI(国际移动用户识别码) for a GSM phone.    
  210.      * 需要权限:READ_PHONE_STATE    
  211.      */      
  212.     public String getSubscriberId(){  
  213.         return tm.getSubscriberId();  
  214.     }  
  215.   
  216.     /**    
  217.      * 取得和语音邮件相关的标签,即为识别符    
  218.      * 需要权限:READ_PHONE_STATE    
  219.      */      
  220.     public String getVoiceMailAlphaTag(){  
  221.         return tm.getVoiceMailAlphaTag();  
  222.     }  
  223.   
  224.     /**    
  225.      * 获取语音邮件号码:    
  226.      * 需要权限:READ_PHONE_STATE    
  227.      */      
  228.     public String getVoiceMailNumber(){  
  229.         return tm.getVoiceMailNumber();//String     
  230.     }  
  231.     /**    
  232.      * 是否漫游:    
  233.      * (在GSM用途下)    
  234.      */      
  235.     public boolean isNetworkRoaming(){  
  236.         return tm.isNetworkRoaming();  
  237.     }  
  238.     /**  
  239.      * ICC卡是否存在  
  240.      */   
  241.     public boolean hasIccCard(){  
  242.         return tm.hasIccCard();   
  243.     }  
  244.      
  245.   
  246.   /**    
  247.     * 获取CPU序列号    
  248.     *    
  249.     * @return CPU序列号(16位)    
  250.     * 读取失败为"0000000000000000"    
  251.     */      
  252.     public static String getCPUSerial() {  
  253.         String str = "", strCPU = "", cpuAddress = "0000000000000000";  
  254.         try {  
  255.             // 读取CPU信息  
  256.             Process pp = Runtime.getRuntime().exec("cat /proc/cpuinfo");  
  257.             InputStreamReader ir = new InputStreamReader(pp.getInputStream());  
  258.             LineNumberReader input = new LineNumberReader(ir);  
  259.             // 查找CPU序列号  
  260.             for (int i = 1; i < 100; i++) {  
  261.                 str = input.readLine();  
  262.                 if (str != null) {  
  263.                     // 查找到序列号所在行  
  264.                     if (str.indexOf("Serial") > -1) {  
  265.                         // 提取序列号  
  266.                         strCPU = str.substring(str.indexOf(":") + 1,  
  267.                                 str.length());  
  268.                         // 去空格  
  269.                         cpuAddress = strCPU.trim();  
  270.                         break;  
  271.                     }  
  272.                 } else {  
  273.                     // 文件结尾  
  274.                     break;  
  275.                 }  
  276.             }  
  277.         } catch (IOException ex) {  
  278.             // 赋予默认值  
  279.             ex.printStackTrace();  
  280.         }  
  281.         return cpuAddress;  
  282.     }  
  283.       
  284. //    public void getMemoryInfo() {  
  285. //        ActivityManager activityManager = (ActivityManager) context  
  286. //                .getSystemService(Context.ACTIVITY_SERVICE);  
  287. //        ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();  
  288. //        activityManager.getMemoryInfo(info);  
  289. //        String tag = "TMINFO";  
  290. //        Log.i(tag, "系统剩余内存:" + (info.availMem >> 10) + "k");  
  291. //        Log.i(tag, "系统是否处于低内存运行:" + info.lowMemory);  
  292. //        Log.i(tag, "当系统剩余内存低于" + info.threshold + "时就看成低内存运行");  
  293. //    }  
  294.   
  295.     /** 
  296.      *  获取设备屏幕分辨率:宽度、高度 
  297.      * @param activity 
  298.      */  
  299.     public int[] getScreenDimension(Activity activity){  
  300.         DisplayMetrics dm = new DisplayMetrics();     
  301.         activity.getWindowManager().getDefaultDisplay().getMetrics(dm);   
  302.         return new int[]{dm.widthPixels, dm.heightPixels};   
  303.     }  
  304.       
  305.     /** 
  306.      * 获取GPS|网络定位位置信息,经纬度<br> 
  307.      * provider = android.location.LocationManager.GPS_PROVIDER;<br> 
  308.      * provider = android.location.LocationManager.NETWORK_PROVIDER 
  309.      * @param  provider 
  310.      * @return double[] 
  311.      */  
  312.     public double[] getLocation(String provider) {  
  313.         String serviceString = Context.LOCATION_SERVICE;  
  314.         LocationManager LocationManager = (LocationManager) context  
  315.                 .getSystemService(serviceString);  
  316.         Location location = LocationManager.getLastKnownLocation(provider);  
  317.         double lat = location.getLatitude();  
  318.         double lng = location.getLongitude();  
  319.         return new double[]{lat,lng};  
  320.     }  
  321.       
  322.     /** 
  323.      * 获取时区 
  324.      * @return 
  325.      */  
  326.     public TimeZone getDefaultTimeZone(){  
  327.         return TimeZone.getDefault();  
  328.     }  
  329.   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值