2010-07-12 72 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