2010-07-12 70 views
9

Android有没有像iPhone这样的UDID?如果是的话,有没有一种方法我可以通过编程来获得它?Android的UDID像iPhone?

由于 克里斯

+0

重复:http://stackoverflow.com/questions/2785485/is-there-a -unique-android-device-id 另一个:http://stackoverflow.com/questions/3115918/android-unique-id/3116243#3116243 – ognian 2010-07-12 07:10:55

回答

12

docs

getDeviceId()

返回唯一的设备ID,用于 例如,IMEI对于GSM和CDMA手机的MEID 。如果设备 ID不可用,则返回null。

1

设备ID仅用于在您启动时通过将您的手机与Google帐户关联,即在仿真器上不可用的情况下注册Market的情况下才可用。这似乎已经改变了Android 2.2,其中一个是为模拟器生成的。我不认为它与IMEI,ICC或任何其他与电话相关的令牌相关联,而是Google网络服务为识别您的手机而生成的伪唯一令牌。

8

这是很容易得到Android的UDID - 看看下面的代码:

public class DemoActivityActivity extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 

    Log.d(">>>>", "Android ID: " + Secure.getString(getContentResolver(), Secure.ANDROID_ID)); 
    Log.d(">>>>", "Device ID : " + tm.getDeviceId()); 

} 

为获得设备ID,你必须设置下列权限在AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

对于获取Android ID无需设置任何权限。

1

我实现了一个类来获得IMEI/WIFI MAC地址/设备ID,希望对你有用^^

public class DeviceInfo { 

protected static String imeiNumber; 
protected static String wifiMacAddress; 
protected static String deviceID; 

// This method must be called before other method 
public static void init(Context context) throws Exception { 
    imeiNumber = getImei(context); 
    wifiMacAddress = getWifiMacAddress(context); 
    deviceID = getDeviceId(context); 
} 

public static String getDeviceInfo() { 
    return deviceID; 
} 

public static String getImei() { 
    return imeiNumber; 
} 

public static String getWifiMacAddress() { 
    return wifiMacAddress; 
} 

public static String getModel() { 
    return Build.MODEL; 
} 

public static String getOsVersion() { 
    return Build.VERSION.RELEASE; 
} 

protected static String getDeviceId(Context context) throws Exception { 
    String imei = getImei(context); 
    if (imei != null) return imei; 
    String tid = getWifiMacAddress(context); 
    return tid; 
} 

protected static String getWifiMacAddress(Context context) throws Exception { 
    WifiManager manager = (WifiManager) context 
      .getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wifiInfo = manager.getConnectionInfo(); 
    if (wifiInfo == null || wifiInfo.getMacAddress() == null) 
     return md5(UUID.randomUUID().toString()); 
    else return wifiInfo.getMacAddress().replace(":", "").replace(".", ""); 
} 

protected static String getImei(Context context) { 
    TelephonyManager m = (TelephonyManager) context 
      .getSystemService(Context.TELEPHONY_SERVICE); 
    String imei = m != null ? m.getDeviceId() : null; 
    return imei; 
} 

protected static String md5(String s) throws Exception { 
    MessageDigest md = MessageDigest.getInstance("MD5"); 

    md.update(s.getBytes()); 

    byte digest[] = md.digest(); 
    StringBuffer result = new StringBuffer(); 

    for (int i = 0; i < digest.length; i++) { 
     result.append(Integer.toHexString(0xFF & digest[i])); 
    } 
    return (result.toString()); 
} 
} 
+0

添加以上代码的权限。 <使用权限android:name =“android.permission.ACCESS_WIFI_STATE”/> – user1154390 2014-03-10 11:13:55