Android device ID

5 апреля 2011 г.

Бывает возникает необходимость получить какой-то уникальный идентификатор для 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

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 хеш от этой строки.

Теги: рубрика Программирование
  • Похожие статьи
  • Предыдущие из рубрики