Learn how to get the unique identifier of an android device (21)
Because a stable and reliable unique device identification code is required for the project, some information on the internet is searched. We will introduce several methods today.
1. DEVICE_ID
If we do need the identifier of a real device, DEVICE_ID may be used. In the past, our Android device was a mobile phone.
DEVICE_ID can be obtained through TelephonyManager. getDeviceId (). It returns IMEI, MEID, or ESN based on different mobile devices.
But it will encounter many problems during use:
- Non-mobile device: This DEVICE_ID is not available if only Wifi devices or music players do not have the hardware function for communication.
- Permission: The READ_PHONE_STATE permission is required to obtain the DEVICE_ID. However, if we only want to obtain the DEVICE_ID and do not use other call functions, this permission is a little small.
- Bug: In a few mobile devices, this vulnerability will return garbage, such as zeros or asterisks products.
2. MAC ADDRESS
We can also obtain the mac address as the device id through the Wifi or bluetooth DEVICE of the mobile phone, but we do not recommend this because it is not
All devices have Wifi, And if Wifi is not enabled, the hardware device cannot return mac address.
3. Serial Number
In Android 2.3, you can use android. OS. Build. SERIAL to obtain data. Non-mobile devices can use this interface.
4. ANDROID_ID
ANDROID_ID is the number of 64bits generated and stored when the device is started for the first time. This number is reset when the device is set to wipe.
ANDROID_ID seems to be a good choice for obtaining the Device ID, but it also has defects:
- It is reliable and stable in Android <= 2.1 or Android> = 2.3, but it is not reliable in Android 2.2.
- A common bug occurs on devices produced by mainstream manufacturers, that is, each device generates the same ANDROID_ID: 9774d56d682e549c.
5. Installtion ID: UUID
The above four methods have some limitations or bugs. Here, there is another solution, that is, using UUID, which
You do not need to access the device resources or the device type.
This method is implemented by generating an ID after the first operation after the program is installed. However, this method is different from the unique identifier of the device.
Different IDs are generated by the application, rather than the unique ID of the device. Therefore, it is often used to identify the unique ID (Installtion ID) in an application, or
Users track the number of applications installed. Fortunately, Google Developer Blog provides a framework like this:
Let's look at the following program: (generate a unique UUID for each device, based on ANDROID_ID, and use TelephonyManager when the acquisition fails. getDeviceId () is an alternative method. If it fails again, use the UUID generation policy .)
public class DeviceUuidFactory {protected static final String PREFS_FILE = "device_id.xml";protected static final String PREFS_DEVICE_ID = "device_id";protected static 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) {uuid = UUID.fromString(id);} else {final String androidId = Secure.getString(context.getContentResolver(),Secure.ANDROID_ID);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);}prefs.edit().putString(PREFS_DEVICE_ID, uuid.toString()).commit();}}}}}}
Reprinted please indicate the source: http://blog.csdn.net/hai_qing_xu_kong/article/details/44194763 sentiment control _