Android device ID
Бывает возникает необходимость получить какой-то уникальный идентификатор для Android телефона. Какие могут быть варианты? В данном топике опишу семь известных мне способов сделать это. (Точее, способов будет шесть, а вот седьмой как вариант – это комбинация всех шести предыдущих). Итак.
Android IMEI.
Думаю, Вам известно, что каждый, даже самый старый черно-белый телефон, имеет свой уникальный идентификатор – IMEI (International Mobile Equipment Identity), применяемый по большей степени в GSM сетях. Он устанавливается производителем телефона и хранится в прошивке. Можем его смело использовать в качестве требуемого идентификатора:
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String devicIMEI = telephonyManager.getDeviceId();
Для эмулятора всегда возвращается «000000000000000″, для реального телефона что-то наподобие «351256985671943″
Phone Number
Следующим образом можем получить номер телефона:
String phoneNumber = telephonyManager.getLine1Number();
Вернет строку вида: +ХХХХХХХХХХХХ (Х = [0..9])
Примечание: предыдущие два примера требуют указания в манифесте следующего пермишина:
android.permission.READ_PHONE_STATE
Псевдо-уникальный ID
Не все андроид-девайсы могут быть оснащены GSM-модулем, скажем, зато у всех у них есть производитель, который «слепил» устройство из всяких железок. Вот какраз информация об этих железках, собранная вместе, и может послужить в качестве уникального идентификатора (правда возможны и повторения). В некоторых случаях может пригодиться. Сконструируем из этих данных что-то похожее на IMEI телефона (15 знаков):
String pseudoID = «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;
Итог: 356984215578214
Android Device ID
Это еще один ID. Считается ненадежным, так как может в некоторых случаях быть и null. Обратимся к документации:
A 64-bit number (as a hex string) that is randomly generated on the device’s first boot and should remain constant for the lifetime of the device.
Ничего, пригодится:
String androidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
Для тех кто хочет узнать android device id, предлагаем скачать программу, которая вам его покажет.
Wi-Fi Mac адрес
В качестве уникального Device Id можно использовать Mac Wi-Fi-адаптера. Для его получения необходимо в манифесте установить права:
android.permission.ACCESS_WIFI_STATE WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); String wifiMac = wifiManager.getConnectionInfo().getMacAddress();
Результат: 8794ee6db82e389a
Android BlueTooth ID
По аналогии с Wi-Fi мак-адресом, может взять и голубозубый мак. (требуются права android.permission.BLUETOOTH и, возможно, включенный адаптер)
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); String blueToothMac = bluetoothAdapter.getAddress();
Номер 7
Вариация всех предыдущих методов. Самый простой вариант – получить все вышеописанные идентификаторы, сложить в одну строку и взять md5 хеш от этой строки.