Issue
I just wonder what would be the best to get device id I have 2 options either I use below code that would need run time permission android.permission.READ_PHONE_STATE
-
private String android_id = Secure.getString(getContext().getContentResolver(),
Secure.ANDROID_ID);
Or
Secondly I have option of UUID that will not need any run time permission but need to be mapped with users data(like email or phone) to identify.
String uniqueID = UUID.randomUUID().toString();
Any suggestions which one to use and why would be appreciated.
Thanks
Solution
ANDROID ID:
On a device first boot, a random value is generated and stored. This value is available via Settings.Secure.ANDROID_ID. It’s a 64-bit number that should remain constant for the lifetime of a device. ANDROID_ID seems a good choice for a unique device identifier because it’s available for smartphones and tablets.
Issues: However, the value may change if a factory reset is performed on the device. There is also a known bug with a popular handset from a manufacturer where every instance has the same ANDROID_ID. Clearly, the solution is not 100% reliable.
UUID:
As the requirement for most applications is to identify a particular installation and not a physical device, a good solution to get a unique id for a user if to use the UUID class.
Issues: UUID.randomUUID() method generates a unique identifier for a specific installation. You have just to store that value and your user will be identified at the next launch of your application. You can also try to associate this solution with the Android Backup service to keep the information available for the user even if he installs your application on another device.
CONCLUSION:
Identify a particular device on Android is not an easy thing. There are many good reasons to avoid that. The best solution is probably to identify a particular installation by using the UUID solution. However, if you want absolutely identify a particular device physically, you can try to use the ANDROID_ID solution. Not 100% reliable but better than another solution.
Answered By - Gowrishankar
Answer Checked By - Marilyn (JavaFixing Volunteer)