2010-07-12 2 views
9

Есть ли у Android UDID, например, IPhone? Если да, есть ли способ, я могу получить его программно?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

ответ

12

Из docs:

getDeviceId()

Возвращает уникальный идентификатор устройства, для например, IMEI для GSM и MEID для телефонов CDMA. Возврат null, если устройство ID недоступно.

1

Идентификатор устройства используется только в том случае, если вы зарегистрировались на рынке, связав свой телефон с учетной записью Google при запуске, то есть недоступном на эмуляторе. Это, похоже, изменилось с 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()); 

} 

Для получения идентификатора устройства необходимо установить следующее разрешение в AndroidManifest.xml:

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

Для для получения идентификатора Android вам не нужно устанавливать какие-либо разрешения.

1

я реализовал класс, чтобы получить IMEI/Wi-Fi MAC-адрес/DeviceId, надеюсь, что это полезно для вас ^^

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

добавьте следующие разрешения с вышеуказанным кодом. user1154390

Смежные вопросы