Android客户端下个人硬件信息所需的数据获取函数(可供商业统计及精确推送用)

来源:互联网 发布:肚子怎么能减下去 知乎 编辑:程序博客网 时间:2024/05/01 22:16
1)android 获取设备型号、OS版本号:


   view plaincopy to clipboardprint?
import android.os.Build;     
// .....     
    Build bd = new Build();     
    String model = bd.MODEL;    
    android.os.Build.MODEL    
    android.os.Build.VERSION.RELEASE   
import android.os.Build;  
// .....  
    Build bd = new Build();  
    String model = bd.MODEL; 
    android.os.Build.MODEL 
    android.os.Build.VERSION.RELEASE 
 


2)android 获取设备Id等信息: 
    1.需要在AndroidManifest.xml中添加权限。 
      
    2.代码: 
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
/*   
   * 电话状态:   
   * 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   
   * 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES   
   */    
  tm.getNeighboringCellInfo();//List    
  /*   
   * 获取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();//   
/* 
   * 电话状态: 
   * 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 
   * 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES 
   */ 
  tm.getNeighboringCellInfo();//List 
  /* 
   * 获取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)获取AndroidManifest.xml的信息 
    1.versionCode 
    view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
getPackageManager().getPackageInfo(packageName, 0).versionCode   
getPackageManager().getPackageInfo(packageName, 0).versionCode  
    可以用Context.gerPackageName()取得packageName 
    2.versionName 
    view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
getPackageManager().getPackageInfo(packageName, 0).versionName       
    getPackageManager().getPackageInfo(pName, PackageManager.GET_CONFIGURATIONS);   
getPackageManager().getPackageInfo(packageName, 0).versionName    
    getPackageManager().getPackageInfo(pName, PackageManager.GET_CONFIGURATIONS); 




4)Android判断应用是否存在 
    1.通过包名判断 
    view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
public boolean checkBrowser(String packageName) {     
        if (packageName == null || "".equals(packageName))     
            return false;     
        try {     
            ApplicationInfo info = getPackageManager().getApplicationInfo(     
                    packageName, PackageManager.GET_UNINSTALLED_PACKAGES);     
            return true;     
        } catch (NameNotFoundException e) {     
            return false;     
        }     
    }    
public boolean checkBrowser(String packageName) {  
        if (packageName == null || "".equals(packageName))  
            return false;  
        try {  
            ApplicationInfo info = getPackageManager().getApplicationInfo(  
                    packageName, PackageManager.GET_UNINSTALLED_PACKAGES);  
            return true;  
        } catch (NameNotFoundException e) {  
            return false;  
        }  
    }  
   
    2.通过Activity判断 
    view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
Intent intent = new Intent(Intent.ACTION_VIEW);     
    intent.setClassName("com.android.settings", //$NON-NLS-1$     
            "com.android.settings.InstalledAppDetails"); //$NON-NLS-1$     
    intent.putExtra("com.android.settings.ApplicationPkgName", //$NON-NLS-1$     
            mCurrentPkgName);     
    List acts = getPackageManager().queryIntentActivities(     
            intent, 0);     
    if (acts.size() > 0) {     
        startActivity(intent);     
    } else {     
        Toast.makeText(this,     
                getString(R.string.failed_to_resolve_activity),     
                Toast.LENGTH_SHORT).show();     
    }    
Intent intent = new Intent(Intent.ACTION_VIEW);  
    intent.setClassName("com.android.settings", //$NON-NLS-1$  
            "com.android.settings.InstalledAppDetails"); //$NON-NLS-1$  
    intent.putExtra("com.android.settings.ApplicationPkgName", //$NON-NLS-1$  
            mCurrentPkgName);  
    List acts = getPackageManager().queryIntentActivities(  
            intent, 0);  
    if (acts.size() > 0) {  
        startActivity(intent);  
    } else {  
        Toast.makeText(this,  
                getString(R.string.failed_to_resolve_activity),  
                Toast.LENGTH_SHORT).show();  
    }  
 


5)获取设备屏幕分辨率 
    首先我们需要用到的是DisplayMetrics这个类,它可以为我们获得手机屏幕属性,这里将其所在类导入。 
    view plaincopy to clipboardprint?
import android.util.DisplayMetrics;   
import android.util.DisplayMetrics;  
    得到实例对象。 
    view plaincopy to clipboardprint?
DisplayMetrics dm = new DisplayMetrics();      
    getWindowManager().getDefaultDisplay().getMetrics(dm);  
DisplayMetrics dm = new DisplayMetrics();   
    getWindowManager().getDefaultDisplay().getMetrics(dm);  
    得到手机屏幕高度: 
    view plaincopy to clipboardprint?
dm.heightPixels;   
dm.heightPixels;  
    得到手机屏幕宽度: 
    view plaincopy to clipboardprint?
dm.widthPixels;   
dm.widthPixels; 
 


    得到以上手机屏幕的高度跟宽度后,即可以通过这两个值按照比例还设定程序布局中空间的大小。


6)获取CPU序列号


view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
/**   
  * 获取CPU序列号   
  *   
  * @return CPU序列号(16位)   
  * 读取失败为"0000000000000000"   
  */    
public static String getCPUSerial() {    
        String str = "", strCPU = "", cpuAddress = "0000000000000000";    
        try {    
                //读取CPU信息    
                Process pp = Runtime.getRuntime().exec("cat /proc/cpuinfo");    
                InputStreamReader ir = new InputStreamReader(pp.getInputStream());    
                LineNumberReader input = new LineNumberReader(ir);    
                //查找CPU序列号    
                for (int i = 1; i    
                        str = input.readLine();    
                        if (str != null) {    
                                //查找到序列号所在行    
                                if (str.indexOf("Serial") > -1) {    
                                        //提取序列号    
                                        strCPU = str.substring(str.indexOf(":") + 1,    
                                                        str.length());    
                                        //去空格    
                                        cpuAddress = strCPU.trim();    
                                        break;    
                                }    
                        }else{    
                                //文件结尾    
                                break;    
                        }    
                }    
        } catch (IOException ex) {    
                //赋予默认值    
                ex.printStackTrace();    
        }    
        return cpuAddress;    
}   
/** 
  * 获取CPU序列号 
  * 
  * @return CPU序列号(16位) 
  * 读取失败为"0000000000000000" 
  */ 
public static String getCPUSerial() { 
        String str = "", strCPU = "", cpuAddress = "0000000000000000"; 
        try { 
                //读取CPU信息 
                Process pp = Runtime.getRuntime().exec("cat /proc/cpuinfo"); 
                InputStreamReader ir = new InputStreamReader(pp.getInputStream()); 
                LineNumberReader input = new LineNumberReader(ir); 
                //查找CPU序列号 
                for (int i = 1; i 
                        str = input.readLine(); 
                        if (str != null) { 
                                //查找到序列号所在行 
                                if (str.indexOf("Serial") > -1) { 
                                        //提取序列号 
                                        strCPU = str.substring(str.indexOf(":") + 1, 
                                                        str.length()); 
                                        //去空格 
                                        cpuAddress = strCPU.trim(); 
                                        break; 
                                } 
                        }else{ 
                                //文件结尾 
                                break; 
                        } 
                } 
        } catch (IOException ex) { 
                //赋予默认值 
                ex.printStackTrace(); 
        } 
        return cpuAddress; 



7)获取位置信息: locationManager 
    1.获取LocationManager对象 
    view plaincopy to clipboardprint?
String serviceString = Context.LOCATION_SERVICE;    
    LocationManager LocationManager = (LocationManager)getSystemService(serviceString);   
String serviceString = Context.LOCATION_SERVICE; 
    LocationManager LocationManager = (LocationManager)getSystemService(serviceString);  
    2.选择定位方法 
    2.1 GPS_PROVIDER:        GPS 
    2.2    NETWORK_PROVIDER:    NETWORK 
    以network为例: 
    view plaincopy to clipboardprint?
String provider = LocationManager.NETWORK_PROVIDER    
    Location location = locationManager.getLaskKnownLocation(provider);    
    double lat = location.getLatitude();    
    double lng = location.getLongitude();   
String provider = LocationManager.NETWORK_PROVIDER 
    Location location = locationManager.getLaskKnownLocation(provider); 
    double lat = location.getLatitude(); 
    double lng = location.getLongitude();  
8)当前时间和时区


System.currentTimeMillis()获取当前时间 
时区: 


TimeZone.getDefault(); 
0 0
原创粉丝点击