Cómo Obtener el Android ID o IMEI con Kotlin
4 minuto(s)En esta página:
Github
La empresa Google aumento la seguridad de los usuarios limitando el acceso al IMEI de un dispositivo físico real.
En su lugar recomienda hacer uso del Android ID (SSAID) a partir de Android 10 API 29, aún podemos obtener el IMEI de los dispositivos con Android 9 API 28 o versiones inferiores.
Veamos Cómo Obtener el Android ID o IMEI con Kotlin, datos paso a paso usando el estándar de Jetpack Compose recomendado por Google.
1. Importamos clases y librerías necesarias
Algunas de ellas probablemente ya las tengas importadas, elimina las que esten duplicadas:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package com.example.myapplication import android.Manifest import android.content.Context import android.content.pm.PackageManager import android.os.Build import android.os.Bundle import android.provider.Settings import android.telephony.TelephonyManager import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.core.app.ActivityCompat import androidx.compose.runtime.* import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts |
Ahora pasemos con nuestro método on Create.
2. Método onCreate()
En nuestro método principal mostramos en la interfaz del usuario el Android ID o IMEI según corresponda.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MaterialTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { // Mostrar la información en la UI mostrarAndroidIDoIMEI() } } } } } |
Vayamos con las estilización de la información.
3. Función mostrarAndroidIDoIMEI()
Aquí mediante Compose obtenemos y estilizamos la información obtenido.
También mostramos mensajes de permisos:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
@Composable fun mostrarAndroidIDoIMEI() { val context = LocalContext.current // Estado para refrescar la UI cuando se acepte el permiso var hasPermission by remember { mutableStateOf( ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED ) } // Lanzador para pedir el permiso val launcher = rememberLauncherForActivityResult( ActivityResultContracts.RequestPermission() ) { isGranted -> hasPermission = isGranted } // Pedir permiso automáticamente si es Android 9 (API 28) o inferior y no lo tenemos LaunchedEffect(Unit) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && !hasPermission) { launcher.launch(Manifest.permission.READ_PHONE_STATE) } } val idValue = obtenerAndroidIDoIMEI(context) Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Column(horizontalAlignment = Alignment.CenterHorizontally) { Text( text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) "ANDROID ID (SSAID) - 16 caracteres:" else "IMEI (Legacy) - 15 caracteres:", fontWeight = FontWeight.Bold ) Text(text = idValue, fontSize = 20.sp) // Botón de reintento si se denegó if (idValue == "PERMISO_DENEGADO") { Button(onClick = { launcher.launch(Manifest.permission.READ_PHONE_STATE) }) { Text("Conceder Permiso") } } Text( text = "NOTA: Algunos dispositivos o sistemas muestran más caracteres o menos caracteres.", fontWeight = FontWeight.Bold, textAlign = TextAlign.Center, modifier = Modifier .padding(top = 50.dp) ) } } } |
Por último mediante métodos Kotlin obtenemos el Android ID o el IMEI.
3. Función obtenerAndroidIDoIMEI()
Para obtener el Android ID verificamos si el dispositivo tiene la versión Android 10 API 29.
O para obtener el IMEI verificamos si la versión del dispositivo es Android 9 API 28:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
fun obtenerAndroidIDoIMEI(context: Context): String { val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager // Para Android 10 (API 29) hasta el actual if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { return Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID) ?: "ID_NO_DISPONIBLE" } // Para versiones antiguas con permisos (Android 9 API 28 o inferiores) if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { return try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { telephonyManager.imei ?: "IMEI_NULO" } else { @Suppress("DEPRECATION") telephonyManager.deviceId ?: "ID_NULO" } } catch (e: SecurityException) { Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID) } } return "PERMISO_DENEGADO" } |
Ahora veamos si nuestro código funciona.
4. Resultados
Ahora veamos si se obtienen los datos.
4.1 Obtención del Android ID (SSAID)
Comencemos primero con las versiones de dispositivos actuales con Android 10 (API 29) o superior, en donde podemos obtener el Androd ID.
Al ejecutar nuestro proyecto obtenemos el SSAID o simplemente Android ID:

4.1 Obtención del IMEI
Ahora pasemos a los dispositivos con Android 9 API 28 e inferiores en donde aún podemos obtener el IMEI.
Al ejecutarlo obtenemos el IMEI sin problemas:

A continuación te compartire una guía con información importante.
5. Tabla Informativa
Cuando trabajes en la obtención del Android ID o el IMEI, considera esta información:
| Identificador | Longitud y Formato | Versiones Compatibles | Permisos Requeridos | Persistencia (Reseteo) | Uso Principal |
|---|---|---|---|---|---|
| IMEI | 15 dígitos (Numérico) | Android 1.0 hasta 9.0 (API < 29) | READ_PHONE_STATE (Solo versiones antiguas) | Alta: No cambia con Factory Reset ni reinstalación. | Identificación de hardware físico y bloqueo por robo. |
| Android ID (SSAID) | 16 caracteres (Hexadecimal) | Todas (Especialmente 10.0 a 16.0+) | Ninguno (Acceso libre mediante Settings.Secure) | Media: Cambia al restaurar de fábrica o cambiar usuario. | Identificar instalaciones de apps y analíticas de usuario. |
Así de fácil puedes obtener el Android ID o el IMEI de un dispositivo Android.
No sabemos si en el futuro cambie la forma de obtener estos datos, estamos atentos para ver que sucede.
Actualizaremos este tutorial si hay cambios.
Conclusión
En este tutorial has aprendido de forma fácil a Obtener el Android ID o IMEI con Kotlin.
Te servirá de guía para tus proyectos en Android.
Recuerdad mantener a tus usuarios seguros y respetar su privacidad.

También en las categorías, etiquetas, búsquedas y más.
En versiones anteriores, se veian con alto disparejo.
Seguimos trabajando en mejorar la comunidad.



Seguimos trabajando las 24 horas del día para brindarte la mejor experiencia en la comunidad.
Hemos corregido el problema y ahora la web no muestra esa barra horizontal y se ve en su tamaño natural.
Seguimos trabajando las 24 horas del día, para mejorar la comunidad.
Seguimos trabajando las 24 horas y 365 días del año para mejorar tu experiencia en la comunidad.

Seguimos trabajando para brindarte le mejor experiencia en Nube Colectiva.
Social
Redes Sociales (Developers)
Redes Sociales (Digital)