How to find serial number of Android device? How to find serial number of Android device? android android

How to find serial number of Android device?


TelephonyManager tManager = (TelephonyManager)myActivity.getSystemService(Context.TELEPHONY_SERVICE);String uid = tManager.getDeviceId();

getSystemService is a method from the Activity class. getDeviceID() will return the MDN or MEID of the device depending on which radio the phone uses (GSM or CDMA).

Each device MUST return a unique value here (assuming it's a phone). This should work for any Android device with a sim slot or CDMA radio. You're on your own with that Android powered microwave ;-)


As Dave Webb mentions, the Android Developer Blog has an article that covers this.

I spoke with someone at Google to get some additional clarification on a few items. Here's what I discovered that's NOT mentioned in the aforementioned blog post:

  • ANDROID_ID is the preferred solution. ANDROID_ID is perfectly reliable on versions of Android <=2.1 or >=2.3. Only 2.2 has the problems mentioned in the post.
  • Several devices by several manufacturers are affected by the ANDROID_ID bug in 2.2.
  • As far as I've been able to determine, all affected devices have the same ANDROID_ID, which is 9774d56d682e549c. Which is also the same device id reported by the emulator, btw.
  • Google believes that OEMs have patched the issue for many or most of their devices, but I was able to verify that as of the beginning of April 2011, at least, it's still quite easy to find devices that have the broken ANDROID_ID.

Based on Google's recommendations, I implemented a class that will generate a unique UUID for each device, using ANDROID_ID as the seed where appropriate, falling back on TelephonyManager.getDeviceId() as necessary, and if that fails, resorting to a randomly generated unique UUID that is persisted across app restarts (but not app re-installations).

import android.content.Context;import android.content.SharedPreferences;import android.provider.Settings.Secure;import android.telephony.TelephonyManager;import java.io.UnsupportedEncodingException;import java.util.UUID;public class DeviceUuidFactory {    protected static final String PREFS_FILE = "device_id.xml";    protected static final String PREFS_DEVICE_ID = "device_id";    protected static volatile UUID uuid;    public DeviceUuidFactory(Context context) {        if (uuid == null) {            synchronized (DeviceUuidFactory.class) {                if (uuid == null) {                    final SharedPreferences prefs = context                            .getSharedPreferences(PREFS_FILE, 0);                    final String id = prefs.getString(PREFS_DEVICE_ID, null);                    if (id != null) {                        // Use the ids previously computed and stored in the                        // prefs file                        uuid = UUID.fromString(id);                    } else {                        final String androidId = Secure.getString(                            context.getContentResolver(), Secure.ANDROID_ID);                        // Use the Android ID unless it's broken, in which case                        // fallback on deviceId,                        // unless it's not available, then fallback on a random                        // number which we store to a prefs file                        try {                            if (!"9774d56d682e549c".equals(androidId)) {                                uuid = UUID.nameUUIDFromBytes(androidId                                        .getBytes("utf8"));                            } else {                                final String deviceId = ((TelephonyManager)                                         context.getSystemService(                                            Context.TELEPHONY_SERVICE))                                            .getDeviceId();                                uuid = deviceId != null ? UUID                                        .nameUUIDFromBytes(deviceId                                                .getBytes("utf8")) : UUID                                        .randomUUID();                            }                        } catch (UnsupportedEncodingException e) {                            throw new RuntimeException(e);                        }                        // Write the value out to the prefs file                        prefs.edit()                                .putString(PREFS_DEVICE_ID, uuid.toString())                                .commit();                    }                }            }        }    }    /**     * Returns a unique UUID for the current android device. As with all UUIDs,     * this unique ID is "very highly likely" to be unique across all Android     * devices. Much more so than ANDROID_ID is.     *      * The UUID is generated by using ANDROID_ID as the base key if appropriate,     * falling back on TelephonyManager.getDeviceID() if ANDROID_ID is known to     * be incorrect, and finally falling back on a random UUID that's persisted     * to SharedPreferences if getDeviceID() does not return a usable value.     *      * In some rare circumstances, this ID may change. In particular, if the     * device is factory reset a new device ID may be generated. In addition, if     * a user upgrades their phone from certain buggy implementations of Android     * 2.2 to a newer, non-buggy version of Android, the device ID may change.     * Or, if a user uninstalls your app on a device that has neither a proper     * Android ID nor a Device ID, this ID may change on reinstallation.     *      * Note that if the code falls back on using TelephonyManager.getDeviceId(),     * the resulting ID will NOT change after a factory reset. Something to be     * aware of.     *      * Works around a bug in Android 2.2 for many devices when using ANDROID_ID     * directly.     *      * @see http://code.google.com/p/android/issues/detail?id=10603     *      * @return a UUID that may be used to uniquely identify your device for most     *         purposes.     */    public UUID getDeviceUuid() {        return uuid;    }}


String serial = null; try {    Class<?> c = Class.forName("android.os.SystemProperties");    Method get = c.getMethod("get", String.class);    serial = (String) get.invoke(c, "ro.serialno");} catch (Exception ignored) {}

This code returns device serial number using a hidden Android API.