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

来源:互联网 发布:淘宝自定义页面代码 编辑:程序博客网 时间:2024/06/08 06:37
 
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-permissionandroid:name="android.permission.INTERNET" /><!-- 获取机型信息权限 --><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!-- 获取短信发送权限 --><uses-permissionandroid: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

原创粉丝点击