You do not need any permissions to obtain the unique ID of the Android device.
Is there a unique Android device ID?
I have sorted out the answer to this question, including adding another article as a supplement, which can perfectly solve this problem.
Question raised by the author:
Does the Android device have a unique id? If so, how can I obtain this id through java code?
Answer:
I read every answer on stack OverStack, Google's developer blog and Android documentation. I think 'pseudo id' is the best choice.
First, let's take a look at why we don't use other methods: User Email.
User mobile phone number
IMEI
- Only Android phones are available. The IMEI number is a string of 15-digit numbers, such as 359881030314356
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);String szImei = TelephonyMgr.getDeviceId();
Permission required<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Users usually give you a negative comment because you ask them for this permission, because they think that you are stealing their privacy. Obviously, you are collecting some data.
Android ID
- This is unreliable, because sometimes it is null. It is clearly stated in the document that if you restore the factory settings, it will change. And if you root the phone, you can change this ID.
String m_szAndroidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
- It returns a string like 9774d56d682e549c without any permissions.
Wlan mac address
- This can also get a unique ID number, and the returned value is 00: 11: 22: 33: 44: 55. However, when there is no wifi, we cannot obtain data.
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
- Permission required
android.permission.ACCESS_WIFI_STATE
Bluetooth MAC address
- Most apps on the market do not use Bluetooth. If your apps do not use Bluetooth at all, but you and your users require the Bluetooth permission, you are suspicious.
BluetoothAdapter m_BluetoothAdapter = null; m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();String m_szBTMAC = m_BluetoothAdapter.getAddress();
- Permission required
<uses-permission android:name="android.permission.BLUETOOTH "/>
The most appropriate method: Pseudo-Unique ID
API> = 9: The "Build. SERIAL" attribute ensures that the ID is unique. Android devices with more than API 9 currently share 99.5% of the market
Remember: You only ignore 0.5% of users technically. You can focus on 99.5% of users.
API <9: we can read the ROM version number, vendor name, CPU model, and other hardware information of the device to combine a string of 15-digit numbers, which may be repeated, however, the probability is too small to be ignored. Even if we repeat it, the loss of users is only 0.5% at most.
String m_szDevIDShort = "35" + Build. BOARD. length () % 10 + Build. BRAND. length () % 10 + Build. CPU_ABI.length () % 10 + Build. DEVICE. length () % 10 + Build. DISPLAY. length () % 10 + Build. HOST. length () % 10 + Build. ID. length () % 10 + Build. MANUFACTURER. length () % 10 + Build. MODEL. length () % 10 + Build. PRODUCT. length () % 10 + Build. TAGS. length () % 10 + Build. TYPE. length () % 10 + Build. USER. length () % 10; // 13 digits
"35" and the next 13 digits are 15 characters in total. We can get a serial number like 355715565309247, which is very convenient without any permissions.
// Obtain the unique Psuedo IDpublic static String getUniquePsuedoID () {String serial = null; String m_szDevIDShort = "35" + Build. BOARD. length () % 10 + Build. BRAND. length () % 10 + Build. CPU_ABI.length () % 10 + Build. DEVICE. length () % 10 + Build. DISPLAY. length () % 10 + Build. HOST. length () % 10 + Build. ID. length () % 10 + Build. MANUFACTURER. length () % 10 + Build. MODEL. length () % 10 + Build. PRODUCT. length () % 10 + Build. TAGS. length () % 10 + Build. TYPE. length () % 10 + Build. USER. length () % 10; // 13-bit try {serial = android. OS. build. class. getField ("SERIAL "). get (null ). toString (); // API> = 9 use the serial number return new UUID (m_szdevid=.hashcode (), serial. hashCode ()). toString ();} catch (Exception exception) {// serial requires an initialization serial = "serial "; // any initialization} // return new UUID (m_szdevid).hashcode (), serial. hashCode ()). toString ();
In the end, we will get a string of ID: 201710000-28ee-3eab-ffff-ffffe9374e72.
Copyright Disclaimer: This article is an original article by the blogger and cannot be reproduced without the permission of the blogger.