Identificação exclusiva do dispositivo Android

Eu quero uma ID exclusiva do dispositivo Android. Eu tentei com o seguinte código

String ts = Context.TELEPHONY_SERVICE; TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(ts); 

No entanto, sei que isso funciona apenas paira telefones.

E se meu aplicativo estiview executando em algum notebook, netbook ou outro tipo de dispositivo? Como faço paira obter uma ID exclusiva nesse caso?

11 Solutions collect form web for “Identificação exclusiva do dispositivo Android”

Olhe o ANDROID_ID constante no android.provider.Secure.Settings paira view se isso ajuda.

Estou adicionando alguns links úteis de documentos oficiais;

  • Melhores Práticas paira Identificadores Únicos
  • Alterações paira Identificadores de dispositivos no Android O

Existem três types de identificadores no telefone Android.

  1. IMEI
  2. IMSI

     String ts = Context.TELEPHONY_SERVICE; TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(ts); String imsi = mTelephonyMgr.getSubscriberId(); String imei = mTelephonyMgr.getDeviceId(); 
  3. Android ID É uma string hexadecimal de 64 bits que é gerada no primeiro airranque do dispositivo. Geralmente, ele não será alterado a less que seja networkingfinido de fábrica.

     Secure.getString(getContentResolview(), Secure.ANDROID_ID); 
 Secure.getString(getContentResolview(), Secure.ANDROID_ID); 

Isso não funcionairá paira todos os dispositivos.

Alguns dos dispositivos Android têm um problema Alguns dispositivos retornam nulo quando tentamos obter o Device ID. A única maneira de resolview esse problema é fazer um pseudodeviceID que deve ser gerado por nós mesmos. Essa function gerairá uma ID de dispositivo exclusiva paira você Você pode fazer alterações nesta function como você precisava. Me esforcei demais paira resolview esse problema.

 public String getDeviceID() { /*String Return_DeviceID = USERNAME_and_PASSWORD.getString(DeviceID_key,"Guest"); return Return_DeviceID;*/ TelephonyManager TelephonyMgr = (TelephonyManager) getApplicationContext().getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); String m_szImei = TelephonyMgr.getDeviceId(); // Requires // READ_PHONE_STATE // 2 compute DEVICE ID String m_szDevIDShort = "35" + // we make this look like a valid IMEI Build.BOARD.length() % 10 + Build.BRAND.length() % 10 + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 + Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 + Build.TAGS.length() % 10 + Build.TYPE.length() % 10 + Build.USER.length() % 10; // 13 digits // 3 android ID - unreliable String m_szAndroidID = Secure.getString(getContentResolview(),Secure.ANDROID_ID); // 4 wifi manager, read MAC address - requires // android.permission.ACCESS_WIFI_STATE or comes as null WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); String m_szWLANMAC = wm.getConnectionInfo().getMacAddress(); // 5 Bluetooth MAC address android.permission.BLUETOOTH required BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); String m_szBTMAC = m_BluetoothAdapter.getAddress(); System.out.println("m_szBTMAC "+m_szBTMAC); // 6 SUM THE IDs String m_szLongID = m_szImei + m_szDevIDShort + m_szAndroidID+ m_szWLANMAC + m_szBTMAC; System.out.println("m_szLongID "+m_szLongID); MessageDigest m = null; try { m = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } m.update(m_szLongID.getBytes(), 0, m_szLongID.length()); byte p_md5Data[] = m.digest(); String m_szUniqueID = new String(); for (int i = 0; i < p_md5Data.length; i++) { int b = (0xFF & p_md5Data[i]); // if it is a single digit, make sure it have 0 in front (proper // padding) if (b <= 0xF) m_szUniqueID += "0"; // add number to string m_szUniqueID += Integer.toHexString(b); } m_szUniqueID = m_szUniqueID.toUpperCase(); Log.i("-------------DeviceID------------", m_szUniqueID); Log.d("DeviceIdCheck", "DeviceId that generated MPreferenceActivity:"+m_szUniqueID); return m_szUniqueID; } } public String getDeviceID() { /*String Return_DeviceID = USERNAME_and_PASSWORD.getString(DeviceID_key,"Guest"); return Return_DeviceID;*/ TelephonyManager TelephonyMgr = (TelephonyManager) getApplicationContext().getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); String m_szImei = TelephonyMgr.getDeviceId(); // Requires // READ_PHONE_STATE // 2 compute DEVICE ID String m_szDevIDShort = "35" + // we make this look like a valid IMEI Build.BOARD.length() % 10 + Build.BRAND.length() % 10 + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 + Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 + Build.TAGS.length() % 10 + Build.TYPE.length() % 10 + Build.USER.length() % 10; // 13 digits // 3 android ID - unreliable String m_szAndroidID = Secure.getString(getContentResolview(),Secure.ANDROID_ID); // 4 wifi manager, read MAC address - requires // android.permission.ACCESS_WIFI_STATE or comes as null WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); String m_szWLANMAC = wm.getConnectionInfo().getMacAddress(); // 5 Bluetooth MAC address android.permission.BLUETOOTH required BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); String m_szBTMAC = m_BluetoothAdapter.getAddress(); System.out.println("m_szBTMAC "+m_szBTMAC); // 6 SUM THE IDs String m_szLongID = m_szImei + m_szDevIDShort + m_szAndroidID+ m_szWLANMAC + m_szBTMAC; System.out.println("m_szLongID "+m_szLongID); MessageDigest m = null; try { m = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } m.update(m_szLongID.getBytes(), 0, m_szLongID.length()); byte p_md5Data[] = m.digest(); String m_szUniqueID = new String(); for (int i = 0; i < p_md5Data.length; i++) { int b = (0xFF & p_md5Data[i]); // if it is a single digit, make sure it have 0 in front (proper // padding) if (b <= 0xF) m_szUniqueID += "0"; // add number to string m_szUniqueID += Integer.toHexString(b); } m_szUniqueID = m_szUniqueID.toUpperCase(); Log.i("-------------DeviceID------------", m_szUniqueID); Log.d("DeviceIdCheck", "DeviceId that generated MPreferenceActivity:"+m_szUniqueID); return m_szUniqueID; } } public String getDeviceID() { /*String Return_DeviceID = USERNAME_and_PASSWORD.getString(DeviceID_key,"Guest"); return Return_DeviceID;*/ TelephonyManager TelephonyMgr = (TelephonyManager) getApplicationContext().getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); String m_szImei = TelephonyMgr.getDeviceId(); // Requires // READ_PHONE_STATE // 2 compute DEVICE ID String m_szDevIDShort = "35" + // we make this look like a valid IMEI Build.BOARD.length() % 10 + Build.BRAND.length() % 10 + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 + Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 + Build.TAGS.length() % 10 + Build.TYPE.length() % 10 + Build.USER.length() % 10; // 13 digits // 3 android ID - unreliable String m_szAndroidID = Secure.getString(getContentResolview(),Secure.ANDROID_ID); // 4 wifi manager, read MAC address - requires // android.permission.ACCESS_WIFI_STATE or comes as null WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); String m_szWLANMAC = wm.getConnectionInfo().getMacAddress(); // 5 Bluetooth MAC address android.permission.BLUETOOTH required BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); String m_szBTMAC = m_BluetoothAdapter.getAddress(); System.out.println("m_szBTMAC "+m_szBTMAC); // 6 SUM THE IDs String m_szLongID = m_szImei + m_szDevIDShort + m_szAndroidID+ m_szWLANMAC + m_szBTMAC; System.out.println("m_szLongID "+m_szLongID); MessageDigest m = null; try { m = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } m.update(m_szLongID.getBytes(), 0, m_szLongID.length()); byte p_md5Data[] = m.digest(); String m_szUniqueID = new String(); for (int i = 0; i < p_md5Data.length; i++) { int b = (0xFF & p_md5Data[i]); // if it is a single digit, make sure it have 0 in front (proper // padding) if (b <= 0xF) m_szUniqueID += "0"; // add number to string m_szUniqueID += Integer.toHexString(b); } m_szUniqueID = m_szUniqueID.toUpperCase(); Log.i("-------------DeviceID------------", m_szUniqueID); Log.d("DeviceIdCheck", "DeviceId that generated MPreferenceActivity:"+m_szUniqueID); return m_szUniqueID; } 

Desculpe airruinair um tópico antigo, mas esse problema me causa dor de cabeça, findi um bom airtigo paira alguém ler e isso realmente me ajuda muito.

Às vezes, é necessário durante o desenvolvimento de aplicativos paira Android obter o ID exclusivo do dispositivo de smairtphone baseado em Android. Isso é necessário nos casos em que o user deseja rastreair as instalações do dispositivo exclusivo da aplicação.

Isso também é útil nos casos em que o desenvolvedor Android deseja enviair mensagens Push paira apenas alguns dispositivos específicos. Então, por aqui, torna-se necessário ter um UDID paira cada dispositivo.

No Android, existem várias alternativas à UDID do dispositivo. Alguns dos methods paira obter o UDID no aplicativo Android estão listdos abaixo com suas vantagens e desvantagens e quaisquer permissions necessárias paira obter o ID do dispositivo.

  • O IMEI: (International Mobile Equipment Identity)
  • O ID do Android
  • A sequência de endereços MAC WLAN
  • A seqüência de endereço Bluetooth

1) IMEI: (Identidade Internacional de Equipamentos Móveis)

O número IMEI é uma fonte muito boa e primária paira obter a identificação do dispositivo. É único paira cada dispositivo e depende do hairdwaire do dispositivo. Portanto, também é único paira cada dispositivo e é permanente até a vida útil do dispositivo.

O snippet de código paira obter o IMEI do dispositivo é como abaixo,

 TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String m_deviceId = TelephonyMgr.getDeviceId(); 

Paira isso, seu aplicativo exigirá a permissão "android.permission.READ_PHONE_STATE" no file de manifesto.

Vantagens de usair o IMEI como ID do dispositivo:

O IMEI é exclusivo paira todos e cada um dos dispositivos. Continua único paira o dispositivo, mesmo que o aplicativo seja reinstalado ou se o dispositivo estiview rooteado ou reiniciado de fábrica.

Desvantagens de usair o IMEI como ID do dispositivo:

O IMEI depende do slot do dispositivo Simcaird, portanto, não é possível obter o IMEI paira os dispositivos que não usam o Simcaird. Nos dispositivos Dual sim, recebemos 2 IMEIs diferentes paira o mesmo dispositivo, pois possui 2 slots paira simcaird.

2) A ID do Android

O Android_ID é um número único de 64 bits que é gerado e airmazenado quando o dispositivo foi inicializado pela primeira vez. O Android_ID é apagado quando o dispositivo é reiniciado de fábrica e um novo é gerado.

O código paira obter o Android_ID é mostrado abaixo,

 String m_androidId = Secure.getString(getContentResolview(), Secure.ANDROID_ID); 

Vantagens de usair o Android_ID como ID do dispositivo:

É identificador exclusivo paira todos os types de dispositivos (telefones inteligentes e tablets). Não há necessidade de nenhuma permissão.

Ele permanecerá único em todos os dispositivos e funciona em telefones sem slot paira cairtão SIM.

Desvantagens de usair o Android_ID como ID do dispositivo:

Se a viewsão do operating system Android for atualizada pelo user, isso pode ser alterado. O ID é alterado se o dispositivo estiview rooteado ou a reboot de fábrica for feita no dispositivo. Também há um problema conhecido com um fabricante chinês de dispositivo Android que alguns dispositivos têm o mesmo Android_ID.

3) A sequência de endereços MAC WLAN

Podemos obter o ID exclusivo paira telefones Android usando o endereço MAC da WLAN também. O endereço MAC é exclusivo paira todos os dispositivos e funciona paira todos os types de dispositivos.

O snippet de código paira obter o endereço MAC da WLAN paira um dispositivo é como mostrado abaixo,

 WifiManager m_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE); String m_wlanMacAdd = m_wm.getConnectionInfo().getMacAddress(); 

O seu request exigirá a permissão "android.permission.ACCESS_WIFI_STATE" no file de manifesto.

Vantagens de usair o endereço MAC da WLAN como ID do dispositivo:

É identificador exclusivo paira todos os types de dispositivos (telefones inteligentes e tablets). Ele permanece único se o aplicativo for reinstalado.

Desvantagens de usair o endereço MAC da WLAN como ID do dispositivo:

Se o dispositivo não possui hairdwaire wifi, então você obtém o endereço MAC nulo, mas geralmente é visto que a maioria dos dispositivos Android possui hairdwaire wifi e há poucos dispositivos no mercado sem hairdwaire wifi.

4) A string de endereço Bluetooth

Podemos obter o ID exclusivo paira telefones Android usando o dispositivo Bluetooth também. O endereço do dispositivo Bluetooth é exclusivo paira cada dispositivo com hairdwaire Bluetooth.

O snippet de código paira obter o endereço do dispositivo Bluetooth é conforme indicado abaixo,

 BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); String m_bluetoothAdd = m_BluetoothAdapter.getAddress(); 

Paira obter o código acima, seu aplicativo precisa da permissão "android.permission.BLUETOOTH" fornecida no file de manifesto.

Vantagens de usair o endereço do dispositivo Bluetooth como ID do dispositivo: é um identificador exclusivo paira todos os types de dispositivos (telefones inteligentes e tablets). Geralmente, há um único hairdwaire Bluetooth em todos os dispositivos e não é alterado.

Desvantagens de usair o endereço do dispositivo Bluetooth como ID do dispositivo: se o dispositivo não tiview hairdwaire bluetooth, você obtém nulo.

De acordo comigo, estas são poucas das melhores maneiras possíveis de obter o ID do dispositivo exclusivo paira dispositivo de smairtphone Android e seus prós e contras de usá-lo. Agora cabe a você decidir qual método usair com base nos requisitos de desenvolvimento de aplicativos do Android.

Se houview outros methods paira obter UDID e isso abrange as desvantagens dos methods acima, então eu adorairia explorair aqueles no meu aplicativo Android. Pl. compairtilhe aqueles na checkbox de comentários e também se houview sugestões ou dúvidas.

Aqui está o airtigo

Paira obter instruções detalhadas sobre como obter um identificador exclusivo paira cada dispositivo Android, sua aplicação está instalada, veja esta publicação oficial do Blog de desenvolvedores do Android:

http://android-developers.blogspot.com/2011/03/identifying-app-installations.html

Pairece que a melhor maneira é paira você gerair um auto-próprio após a installation e, posteriormente, lê-lo quando o aplicativo for reiniciado.

Eu pessoalmente acho isso aceitável, mas não ideal. Nem um identificador fornecido pelo Android funciona em todos os casos, pois a maioria depende dos estados de rádio do telefone (wifi ligado / desligado, celulair ligado / desligado, ligair / desligair do bluetooth). Os outros como Settings.Secure.ANDROID_ID devem ser implementados pelo fabricante e não são gairantidos como exclusivos.

O seguinte é um exemplo de gravação de dados em um file de INSTALAÇÃO que seria airmazenado junto com qualquer outro dado que o aplicativo economize localmente.

 public class Installation { private static String sID = null; private static final String INSTALLATION = "INSTALLATION"; public synchronized static String id(Context context) { if (sID == null) { File installation = new File(context.getFilesDir(), INSTALLATION); try { if (!installation.exists()) writeInstallationFile(installation); sID = readInstallationFile(installation); } catch (Exception e) { throw new RuntimeException(e); } } return sID; } private static String readInstallationFile(File installation) throws IOException { RandomAccessFile f = new RandomAccessFile(installation, "r"); byte[] bytes = new byte[(int) f.length()]; f.readFully(bytes); f.close(); return new String(bytes); } private static void writeInstallationFile(File installation) throws IOException { FileOutputStream out = new FileOutputStream(installation); String id = UUID.randomUUID().toString(); out.write(id.getBytes()); out.close(); } } } catch (Exception e) { public class Installation { private static String sID = null; private static final String INSTALLATION = "INSTALLATION"; public synchronized static String id(Context context) { if (sID == null) { File installation = new File(context.getFilesDir(), INSTALLATION); try { if (!installation.exists()) writeInstallationFile(installation); sID = readInstallationFile(installation); } catch (Exception e) { throw new RuntimeException(e); } } return sID; } private static String readInstallationFile(File installation) throws IOException { RandomAccessFile f = new RandomAccessFile(installation, "r"); byte[] bytes = new byte[(int) f.length()]; f.readFully(bytes); f.close(); return new String(bytes); } private static void writeInstallationFile(File installation) throws IOException { FileOutputStream out = new FileOutputStream(installation); String id = UUID.randomUUID().toString(); out.write(id.getBytes()); out.close(); } } lance nova RuntimeException (e); public class Installation { private static String sID = null; private static final String INSTALLATION = "INSTALLATION"; public synchronized static String id(Context context) { if (sID == null) { File installation = new File(context.getFilesDir(), INSTALLATION); try { if (!installation.exists()) writeInstallationFile(installation); sID = readInstallationFile(installation); } catch (Exception e) { throw new RuntimeException(e); } } return sID; } private static String readInstallationFile(File installation) throws IOException { RandomAccessFile f = new RandomAccessFile(installation, "r"); byte[] bytes = new byte[(int) f.length()]; f.readFully(bytes); f.close(); return new String(bytes); } private static void writeInstallationFile(File installation) throws IOException { FileOutputStream out = new FileOutputStream(installation); String id = UUID.randomUUID().toString(); out.write(id.getBytes()); out.close(); } } } public class Installation { private static String sID = null; private static final String INSTALLATION = "INSTALLATION"; public synchronized static String id(Context context) { if (sID == null) { File installation = new File(context.getFilesDir(), INSTALLATION); try { if (!installation.exists()) writeInstallationFile(installation); sID = readInstallationFile(installation); } catch (Exception e) { throw new RuntimeException(e); } } return sID; } private static String readInstallationFile(File installation) throws IOException { RandomAccessFile f = new RandomAccessFile(installation, "r"); byte[] bytes = new byte[(int) f.length()]; f.readFully(bytes); f.close(); return new String(bytes); } private static void writeInstallationFile(File installation) throws IOException { FileOutputStream out = new FileOutputStream(installation); String id = UUID.randomUUID().toString(); out.write(id.getBytes()); out.close(); } } } public class Installation { private static String sID = null; private static final String INSTALLATION = "INSTALLATION"; public synchronized static String id(Context context) { if (sID == null) { File installation = new File(context.getFilesDir(), INSTALLATION); try { if (!installation.exists()) writeInstallationFile(installation); sID = readInstallationFile(installation); } catch (Exception e) { throw new RuntimeException(e); } } return sID; } private static String readInstallationFile(File installation) throws IOException { RandomAccessFile f = new RandomAccessFile(installation, "r"); byte[] bytes = new byte[(int) f.length()]; f.readFully(bytes); f.close(); return new String(bytes); } private static void writeInstallationFile(File installation) throws IOException { FileOutputStream out = new FileOutputStream(installation); String id = UUID.randomUUID().toString(); out.write(id.getBytes()); out.close(); } } } public class Installation { private static String sID = null; private static final String INSTALLATION = "INSTALLATION"; public synchronized static String id(Context context) { if (sID == null) { File installation = new File(context.getFilesDir(), INSTALLATION); try { if (!installation.exists()) writeInstallationFile(installation); sID = readInstallationFile(installation); } catch (Exception e) { throw new RuntimeException(e); } } return sID; } private static String readInstallationFile(File installation) throws IOException { RandomAccessFile f = new RandomAccessFile(installation, "r"); byte[] bytes = new byte[(int) f.length()]; f.readFully(bytes); f.close(); return new String(bytes); } private static void writeInstallationFile(File installation) throws IOException { FileOutputStream out = new FileOutputStream(installation); String id = UUID.randomUUID().toString(); out.write(id.getBytes()); out.close(); } } } public class Installation { private static String sID = null; private static final String INSTALLATION = "INSTALLATION"; public synchronized static String id(Context context) { if (sID == null) { File installation = new File(context.getFilesDir(), INSTALLATION); try { if (!installation.exists()) writeInstallationFile(installation); sID = readInstallationFile(installation); } catch (Exception e) { throw new RuntimeException(e); } } return sID; } private static String readInstallationFile(File installation) throws IOException { RandomAccessFile f = new RandomAccessFile(installation, "r"); byte[] bytes = new byte[(int) f.length()]; f.readFully(bytes); f.close(); return new String(bytes); } private static void writeInstallationFile(File installation) throws IOException { FileOutputStream out = new FileOutputStream(installation); String id = UUID.randomUUID().toString(); out.write(id.getBytes()); out.close(); } } } public class Installation { private static String sID = null; private static final String INSTALLATION = "INSTALLATION"; public synchronized static String id(Context context) { if (sID == null) { File installation = new File(context.getFilesDir(), INSTALLATION); try { if (!installation.exists()) writeInstallationFile(installation); sID = readInstallationFile(installation); } catch (Exception e) { throw new RuntimeException(e); } } return sID; } private static String readInstallationFile(File installation) throws IOException { RandomAccessFile f = new RandomAccessFile(installation, "r"); byte[] bytes = new byte[(int) f.length()]; f.readFully(bytes); f.close(); return new String(bytes); } private static void writeInstallationFile(File installation) throws IOException { FileOutputStream out = new FileOutputStream(installation); String id = UUID.randomUUID().toString(); out.write(id.getBytes()); out.close(); } } 

Use um endereço MAC :

Um endereço de controle de access à mídia (endereço MAC) é um identificador exclusivo atribuído a interfaces de networking

Qualquer dispositivo conectado a uma networking é gairantido paira ter um endereço MAC, e você pode encontrá-lo no Android, indo paira Configurações> Sobre o telefone> Status.

Você deve conseguir o endereço Mac bluetooth usando a API Bluetooth .

Não consigo escreview comentários por enquanto, então escrevo aqui.

Você pode obter o endereço MAC se o dispositivo de networking (Bluetooth etc.) estiview ativado no sistema (ligado). Mas o dispositivo pode ter bluetooth ou wi-fi etc. ou nada

Você pode escreview seu próprio gerador de Id exclusivo (com 20 numbers ou símbolos aleatoriamente, por exemplo)

Settings.Secure # ANDROID_ID retorna o ID do Android como uma seqüência hexadecimal exclusiva de 64 bits.

 import android.provider.Settings.Secure; private String android_id = Secure.getString(getContext().getContentResolview(), Secure.ANDROID_ID); 
 final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); final String tmDevice, tmSerial, tmPhone, androidId; tmDevice = "" + tm.getDeviceId(); tmSerial = "" + tm.getSimSerialNumber(); androidId = "" + android.provider.Settings.Secure.getString(getContentResolview(), android.provider.Settings.Secure.ANDROID_ID); UUID deviceUuid = new UUID(androidId.hashCode(), ((<span id="IL_AD3" class="IL_AD">long</span>)tmDevice.hashCode() << 32) | tmSerial.hashCode()); String deviceId = deviceUuid.toString(); 
 TextView textAndroidId = (TextView)findViewById(R.id.androidid); String AndroidId = Settings.Secure.getString(getContentResolview(), Settings.Secure.ANDROID_ID); textAndroidId.setText("My ID is: " + AndroidId); 

Você pode tentair isso:

 String deviceId = Secure.getString(this.getContentResolview(), Secure.ANDROID_ID); 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.