A partir de Android 10 (API level 29), el acceso programático a información como IMEI, MEID y número de serie del dispositivo se ha vuelto fuertemente restringido. Esto afectó a varias aplicaciones que dependen de estos datos, impidiendo la recuperación directa de dicha información.
Para sortear esta limitación, Urmobo MDM implementó una solución que permite a los clientes continuar accediendo a estos identificadores a través de nuestra aplicación, de forma segura y compatible con las nuevas políticas de Android.
📲 Cómo solicitar los datos a Urmobo MDM
El proceso comienza enviando un Intent a Urmobo solicitando los datos del dispositivo. A continuación, un ejemplo de implementación:
Intent request = new Intent("com.urmobo.mdm.GET_DEVICE_DATA");
request.setPackage("com.urmobo.mdm");
// Crea el PendingIntent que recibirá la respuesta
Intent replyIntent = new Intent(this, UrmoboReplyReceiver.class);
replyIntent.setAction("com.cliente.RESPONSE_INFO");
PendingIntent replyPending = PendingIntent.getBroadcast(
context, 0, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE
);
// Adjunta el PendingIntent al Intent original
request.putExtra("UrmoboReply", replyPending);
// Envía el broadcast
context.sendBroadcast(request);
📥 Cómo recibir la respuesta
Tu debes crear la clase UrmoboReplyReceiver que recibirá la intent con las respuestas. Cuando Urmobo MDM procesa la solicitud, devuelve los datos a la aplicación solicitante mediante broadcast a esta clase, que debe heredar de BroadcastReceiver, como en el ejemplo:
public class UrmoboReplyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String id = intent.getStringExtra("UrmoboID");
String imei = intent.getStringExtra("IMEI");
String serial = intent.getStringExtra("SerialNumber");
String token = intent.getStringExtra("EntityToken");
}
};No olvides agregar esta clase también al AndroidManifest, como se muestra en el siguiente ejemplo:
<receiver android:name=".UrmoboReplyReceiver" android:exported="true" />🔁 Personalización de la action
El valor "com.cliente.RESPONSE_INFO" usado en el Intent y en el IntentFilter puede (y debe) ajustarse según el nombre del paquete de su app o la acción que desea definir. Esto garantiza que el receptor escuche únicamente los broadcasts esperados por su aplicación.
Con este mecanismo, es posible recuperar de manera segura los siguientes datos:
UrmoboID (identificador único generado por Urmobo)
IMEI(s) (si hay más de uno, se separarán con
;)Número de serie del dispositivo
Token de la entidad del dispositivo
Esta aproximación asegura compatibilidad con los nuevos requisitos de Android, sin renunciar a la información crítica para la gestión de los dispositivos. ✅