A partir do Android 10 (API level 29), o acesso programático a informações como IMEI, MEID e número de série do dispositivo passou a ser fortemente restrito. Isso impactou diversos aplicativos que dependem desses dados, impedindo a recuperação direta dessas informações.
Para contornar essa limitação, o Urmobo MDM implementou uma solução que permite aos clientes continuarem acessando esses identificadores através de nosso aplicativo, de forma segura e compatível com as novas políticas do Android.
📲 Como solicitar os dados ao Urmobo MDM
O processo começa com o envio de um Intent ao Urmobo solicitando os dados do dispositivo. Veja abaixo um exemplo de implementação:
Intent request = new Intent("com.urmobo.mdm.GET_DEVICE_DATA");
request.setComponent(new ComponentName("com.urmobo.mdm", "com.urmobo.mdm.service.receivers.InformationRequestReceiver"));
// Cria o PendingIntent que receberá a resposta
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
);
// Anexa o PendingIntent ao Intent original
request.putExtra("UrmoboReply", replyPending);
// Envia o broadcast
context.sendBroadcast(request);📥 Como receber a resposta
Você deve criar a classe UrmoboReplyReceiver que irá receber a Intent com as respostas. Quando o Urmobo MDM processa a solicitação, ele devolve os dados ao app solicitante via broadcast para esta classe, que deve herdar de BroadcastReceiver, semelhante ao exemplo abaixo:
public class UrmoboReplyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String id = intent.getStringExtra("UrmoboID");
String imei = intent.getStringExtra("IMEI");
String name = intent.getStringExtra("DeviceName");
String serial = intent.getStringExtra("SerialNumber");
String token = intent.getStringExtra("EntityToken");
String customData = intent.getStringExtra("CustomData");
}
};A string do campo "CustomData" vem dos dados auxiliares do cadastro do equipamento, nela estarão todos os dados auxiliares cadastrados no modelo "descricao 1:valor 1;descricao 2:valor 2;descricao 3:valor 3;...".
Não se esqueça de adicionar esta classe também ao AndroidManifest, conforme exemplo abaixo:
<receiver
android:name=".UrmoboReplyReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.cliente.RESPONSE_INFO" />
</intent-filter>
</receiver>🔁 Personalização da action
O valor "com.cliente.RESPONSE_INFO" usado na Intent e no IntentFilter pode (e deve) ser ajustado conforme o nome do pacote do seu app ou a ação que deseja definir. Isso garante que o receptor escute apenas os broadcasts esperados pelo seu aplicativo.
Com esse mecanismo, é possível recuperar com segurança os seguintes dados:
- UrmoboID (identificador exclusivo gerado pelo Urmobo)
- IMEI(s) (se houver mais de um, serão separados por
;) - Número de série do dispositivo
- Token da entidade do dispositivo
Essa abordagem garante compatibilidade com as novas exigências do Android, sem abrir mão das informações críticas para o gerenciamento dos dispositivos. ✅