Android 获取唯一设备号和机型信息

  1. Andriod 要联网、获得机型信息,需要得到授权。   
  2. 对于模拟器,就是配置AndroidManifest.xml 文件 加入 Xml代码   
  3. <!-- 联网权限 -->    
  4. <uses-permission    
  5.     android:name="android.permission.INTERNET" />    
  6. <!-- 获取机型信息权限 -->    
  7. <uses-permission      
  8.     android:name="android.permission.READ_PHONE_STATE" />    
  9. <!-- 获取短信发送权限 -->    
  10. <uses-permission    
  11.     android:name="android.permission.SEND_SMS" />    
  12. <!-- 联网权限 -->  
  13. <uses-permission  
  14. android:name="android.permission.INTERNET" />  
  15. <!-- 获取机型信息权限 -->  
  16. <uses-permission   
  17. android:name="android.permission.READ_PHONE_STATE" />  
  18. <!-- 获取短信发送权限 -->  
  19. <uses-permission  
  20. android:name="android.permission.SEND_SMS" />  
  21.   
  22. 现在你就可以调用HttpUrlConnection进行Http请求了,试试以下代码,你可以获得机型信息。   
  23.   
  24. Java代码   
  25. //...extends Activity       
  26.         TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);     
  27.         StringBuilder sb = new StringBuilder();     
  28.     
  29.         sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());     
  30.         sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());     
  31.         sb.append("\nLine1Number = " + tm.getLine1Number());     
  32.         sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());     
  33.         sb.append("\nNetworkOperator = " + tm.getNetworkOperator());     
  34.         sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());     
  35.         sb.append("\nNetworkType = " + tm.getNetworkType());     
  36.         sb.append("\nPhoneType = " + tm.getPhoneType());     
  37.         sb.append("\nSimCountryIso = " + tm.getSimCountryIso());     
  38.         sb.append("\nSimOperator = " + tm.getSimOperator());     
  39.         sb.append("\nSimOperatorName = " + tm.getSimOperatorName());     
  40.         sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());     
  41.         sb.append("\nSimState = " + tm.getSimState());     
  42.         sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());     
  43.         sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());     
  44.         Log.d("info", sb.toString());    
  45. //...extends Activity    
  46. TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  
  47. StringBuilder sb = new StringBuilder();  
  48.   
  49. sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());  
  50. sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());  
  51. sb.append("\nLine1Number = " + tm.getLine1Number());  
  52. sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());  
  53. sb.append("\nNetworkOperator = " + tm.getNetworkOperator());  
  54. sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());  
  55. sb.append("\nNetworkType = " + tm.getNetworkType());  
  56. sb.append("\nPhoneType = " + tm.getPhoneType());  
  57. sb.append("\nSimCountryIso = " + tm.getSimCountryIso());  
  58. sb.append("\nSimOperator = " + tm.getSimOperator());  
  59. sb.append("\nSimOperatorName = " + tm.getSimOperatorName());  
  60. sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());  
  61. sb.append("\nSimState = " + tm.getSimState());  
  62. sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());  
  63. sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());  
  64. Log.d("info", sb.toString());  
  65.   
  66.   
  67. 在Android中以上机型信息在手机状态Status里   
  68. Settings->About Phone->Status   
  69. 各个栏目的功能介绍如下:   
  70. Battery status:电池充电/未充电状态   
  71. Battery level:电池剩余电量   
  72. Phone number:手机序列号   
  73. Network:所处的移动网络   
  74. Signal strength:信号度   
  75. Network type:网络制式   
  76. Service state:所在服务区   
  77. Roaming:漫游/未漫游   
  78. Data access:共访问的数据大小   
  79. IMEI:IMEI码   
  80. IMEI SV:IMEI码的版本   
  81. IMSI:国际移动用户识别码   
  82. Wi-Fi  Mac address:G1无线Wi-Fi网络的Mac地址。   
  83. Bluetooth address:蓝牙地址   
  84. Up time:正常运行时间   
  85. Awake Time:手机唤醒时间   
  86.   
  87.   
  88.   
  89.   
  90.   
  91. 在计算机上,我们习惯用MAC地址来标志一台计算机。在Android设备上,可以用IMIE或者Android ID来标志一个设备。   
  92.   
  93. 看一下Android上怎样获取这样的信息。   
  94.   
  95. 一个是TelephonyManager的getDeviceId,另外一个是Settings.System的ANDROID_ID   
  96.   
  97. 这里贴一段测试代码:   
  98.   
  99.   
  100.   
  101. Java代码   
  102. package com.npc4.android.imie;     
  103. import android.app.Activity;     
  104. import android.content.Context;     
  105. import android.os.Bundle;     
  106. import android.telephony.TelephonyManager;     
  107. import android.util.Log;     
  108. import android.provider.Settings.System;     
  109. /**   
  110. * @author lixinso   
  111. * 获取系统的唯一标识   
  112. */    
  113. public class IMIE extends Activity {     
  114.      @Override    
  115.     public void onCreate(Bundle savedInstanceState) {     
  116.         super.onCreate(savedInstanceState);     
  117.         setContentView(R.layout.main);     
  118.       
  119.         getImieStatus();     
  120.         getAndroidId();     
  121.       
  122.     }     
  123. private void getImieStatus() {     
  124. TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);     
  125. String deviceId = tm.getDeviceId();     
  126. Log.e("DEVICE_ID ", deviceId + " ");     
  127. }     
  128. private void getAndroidId(){     
  129. String androidId = System.getString(getContentResolver(), System.ANDROID_ID);     
  130. Log.e("ANDROID_ID", androidId + " ");     
  131. }     
  132. }    
  133. package com.npc4.android.imie;  
  134. import android.app.Activity;  
  135. import android.content.Context;  
  136. import android.os.Bundle;  
  137. import android.telephony.TelephonyManager;  
  138. import android.util.Log;  
  139. import android.provider.Settings.System;  
  140. /** 
  141. * @author lixinso 
  142. * 获取系统的唯一标识 
  143. */  
  144. public class IMIE extends Activity {  
  145.      @Override  
  146.     public void onCreate(Bundle savedInstanceState) {  
  147.         super.onCreate(savedInstanceState);  
  148.         setContentView(R.layout.main);  
  149.   
  150.         getImieStatus();  
  151.         getAndroidId();  
  152.   
  153.     }  
  154. private void getImieStatus() {  
  155. TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);  
  156. String deviceId = tm.getDeviceId();  
  157. Log.e("DEVICE_ID ", deviceId + " ");  
  158. }  
  159. private void getAndroidId(){  
  160. String androidId = System.getString(getContentResolver(), System.ANDROID_ID);  
  161. Log.e("ANDROID_ID", androidId + " ");  
  162. }  
  163. }  
  164.   
  165. tm.getDeviceId()表示唯一的设备ID,例如对于GSM手机返回IMEI,对于CDMA手机返回MEID,如果设备不可用则返回NULL,比如在模拟器上。   
  166.   
  167. System.getString(getContentResolver(), System.ANDROID_ID)表示一个64位的数字,在设备第一次启动的时候随机生成并在设备的整个生命周期中不变。(如果重新进行出厂设置可能会改变)   
  168.   
  169.   
  170.   
  171.   
  172. 如何获取一个能唯一标识每台Android设备的序号?这个问题有很多答案,但是他们中的大部分只在某些情况下有效。根据测试:所有的设备都可以返回一个 TelephonyManager.getDeviceId() 所有的GSM设备 (测试设备都装载有SIM卡) 可以返回一个TelephonyManager.getSimSerialNumber() 所有的CDMA 设备对于 getSimSerialNumber() 却返回一个空值! 所有添加有谷歌账户的设备可以返回一个 ANDROID_ID 所有的CDMA设备对于 ANDROID_ID 和 TelephonyManager.getDeviceId() 返回相同的值(只要在设置时添加了谷歌账户) 目前尚未测试的:没有SIM卡的GSM设备、没有添加谷歌账户的GSM设备、处于飞行模式的设备。 所以如果你想得到设备的唯一序号, TelephonyManager.getDeviceId() 就足够了。但很明显暴露了DeviceID会使一些用户不满,所以最好把这些id加密了。实际上加密后的序号仍然可以唯一的识别该设备,并且不会明显的暴露用户的特定设备,例如,使用 String.hashCode() ,结合UUID: 1 final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);  2    3     final String tmDevice, tmSerial, tmPhone, androidId;  4     tmDevice = "" + tm.getDeviceId();  5     tmSerial = "" + tm.getSimSerialNumber();  6     androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);  7    8     UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());  9     String uniqueId = deviceUuid.toString(); 最后的deviceID可能是这样的结果: 00000000-54b3-e7c7-0000-000046bffd97 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值