Accessing IMEI on Android 10+ for a React Native App Managed Through Android Enterprise (MDM)
Hello everyone,
I am developing a mobile application using React Native for Android, and I need to retrieve the device's IMEI number for device identification and management purposes.
I understand that Android 10 and above restrict access to hardware identifiers such as IMEI and that normal applications cannot access them using the standard TelephonyManager APIs.
However, I would like to understand whether this restriction can be addressed through Android Enterprise device management (MDM).
My questions are:
-
Device Owner / Fully Managed Devices: If our application is deployed on company-owned devices enrolled as fully managed devices through Android Enterprise, can it access the IMEI?
-
Required Permissions: Is granting
READ_PHONE_STATEsufficient for a properly configured Device Owner application, or are additional permissions or system-level privileges required? -
React Native Integration: Since the application is built using React Native, can we implement this functionality through a custom native Android module written in Kotlin or Java and expose the result to React Native?
-
Android Enterprise APIs: Is there an officially supported Android Enterprise API or device provisioning mechanism that allows an MDM application to retrieve the IMEI? Would the approach differ between fully managed devices and devices with a Work Profile?
-
Google Play Distribution: Are there any restrictions on distributing such an application through Managed Google Play, and does the solution require system-app privileges, OEM support, or special allowlisting?
-
Alternative Identifiers: If direct IMEI access is not supported for our use case, what is the recommended persistent device identifier for identifying and tracking company-managed devices?
Our objective is to identify devices reliably in an enterprise environment, not to track users for advertising purposes.
I would appreciate guidance from anyone who has implemented similar functionality using Android Enterprise, particularly on Android 10 and later.
Thank you!
