Andriod 要联网、获得机型信息,需要得到授权。 对于模拟器,就是配置AndroidManifest.xml 文件 加入 Xml代码 <!-- 联网权限 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 获取机型信息权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 获取短信发送权限 --> <uses-permission android:name="android.permission.SEND_SMS" /> <!-- 联网权限 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 获取机型信息权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 获取短信发送权限 --> <uses-permission android:name="android.permission.SEND_SMS" /> 现在你就可以调用HttpUrlConnection进行Http请求了,试试以下代码,你可以获得机型信息。 Java代码 //...extends Activity TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); StringBuilder sb = new StringBuilder(); sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId()); sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion()); sb.append("\nLine1Number = " + tm.getLine1Number()); sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso()); sb.append("\nNetworkOperator = " + tm.getNetworkOperator()); sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName()); sb.append("\nNetworkType = " + tm.getNetworkType()); sb.append("\nPhoneType = " + tm.getPhoneType()); sb.append("\nSimCountryIso = " + tm.getSimCountryIso()); sb.append("\nSimOperator = " + tm.getSimOperator()); sb.append("\nSimOperatorName = " + tm.getSimOperatorName()); sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber()); sb.append("\nSimState = " + tm.getSimState()); sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId()); sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber()); Log.d("info", sb.toString()); //...extends Activity TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); StringBuilder sb = new StringBuilder(); sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId()); sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion()); sb.append("\nLine1Number = " + tm.getLine1Number()); sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso()); sb.append("\nNetworkOperator = " + tm.getNetworkOperator()); sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName()); sb.append("\nNetworkType = " + tm.getNetworkType()); sb.append("\nPhoneType = " + tm.getPhoneType()); sb.append("\nSimCountryIso = " + tm.getSimCountryIso()); sb.append("\nSimOperator = " + tm.getSimOperator()); sb.append("\nSimOperatorName = " + tm.getSimOperatorName()); sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber()); sb.append("\nSimState = " + tm.getSimState()); sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId()); sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber()); Log.d("info", sb.toString()); 在Android中以上机型信息在手机状态Status里 Settings->About Phone->Status 各个栏目的功能介绍如下: Battery status:电池充电/未充电状态 Battery level:电池剩余电量 Phone number:手机序列号 Network:所处的移动网络 Signal strength:信号度 Network type:网络制式 Service state:所在服务区 Roaming:漫游/未漫游 Data access:共访问的数据大小 IMEI:IMEI码 IMEI SV:IMEI码的版本 IMSI:国际移动用户识别码 Wi-Fi Mac address:G1无线Wi-Fi网络的Mac地址。 Bluetooth address:蓝牙地址 Up time:正常运行时间 Awake Time:手机唤醒时间 在计算机上,我们习惯用MAC地址来标志一台计算机。在Android设备上,可以用IMIE或者Android ID来标志一个设备。 看一下Android上怎样获取这样的信息。 一个是TelephonyManager的getDeviceId,另外一个是Settings.System的ANDROID_ID 这里贴一段测试代码: Java代码 package com.npc4.android.imie; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.telephony.TelephonyManager; import android.util.Log; import android.provider.Settings.System; /** * @author lixinso * 获取系统的唯一标识 */ public class IMIE extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); getImieStatus(); getAndroidId(); } private void getImieStatus() { TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); String deviceId = tm.getDeviceId(); Log.e("DEVICE_ID ", deviceId + " "); } private void getAndroidId(){ String androidId = System.getString(getContentResolver(), System.ANDROID_ID); Log.e("ANDROID_ID", androidId + " "); } } package com.npc4.android.imie; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.telephony.TelephonyManager; import android.util.Log; import android.provider.Settings.System; /** * @author lixinso * 获取系统的唯一标识 */ public class IMIE extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); getImieStatus(); getAndroidId(); } private void getImieStatus() { TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); String deviceId = tm.getDeviceId(); Log.e("DEVICE_ID ", deviceId + " "); } private void getAndroidId(){ String androidId = System.getString(getContentResolver(), System.ANDROID_ID); Log.e("ANDROID_ID", androidId + " "); } } tm.getDeviceId()表示唯一的设备ID,例如对于GSM手机返回IMEI,对于CDMA手机返回MEID,如果设备不可用则返回NULL,比如在模拟器上。 System.getString(getContentResolver(), System.ANDROID_ID)表示一个64位的数字,在设备第一次启动的时候随机生成并在设备的整个生命周期中不变。(如果重新进行出厂设置可能会改变) 如何获取一个能唯一标识每台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