Как получить уникальный номер устройства в Android?

Я пробовал использовать такие методы, как IMEI, MEID, MAC-адрес, android_id, но все не в порядке.

Как получить уникальный номер устройства в Android?

Прочтите вопрос это SO.

Jeroen Heier 07.06.2018 05:54

Возможный дубликат Есть ли уникальный идентификатор устройства Android?

Shivaji Varma 07.06.2018 06:04

Вы искали это перед публикацией?

RonTLV 07.06.2018 07:07
0
3
8 924
5

Ответы 5

Для устройств Android доступно несколько уникальных идентификаторов.

IMEI

TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei = TelephonyMgr.getDeviceId();

разрешение

android.permission.READ_PHONE_STATE

MAC-адрес WLAN

WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String wanMAC = wifi .getConnectionInfo().getMacAddress();

разрешение

android.permission.ACCESS_WIFI_STATE

MAC-адрес Bluetooth

BluetoothAdapter bluetoothAdapter =BluetoothAdapter.getDefaultAdapter();
String bluetoothMAC = bluetoothAdapter .getAddress();

разрешение

android.permission.BLUETOOTH

Android ID

String androidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);

Обратите внимание: не все устройства будут иметь IMEI, не все сотовые технологии используют его, а устройства без сотового подключения - нет. Вы можете получить MAC-адрес только в том случае, если соответствующее оборудование включено, а с Android 6.0 API-интерфейсы будут возвращать значение мусора.

Gabe Sechan 07.06.2018 06:12

IMEI и Android ID не будут работать в Android 10, так как они ограничены

Amin Pinjari 03.10.2019 08:31

MAC-адрес не может быть найден в Android версии 11. проверьте stackoverflow.com/questions/66257004/…

Amit Vaghela 03.03.2021 07:53

Да, согласно документации developer.android.com/training/articles/user-data-ids#java добавлены ограничения для идентификаторов оборудования Android.

Venki WAR 03.03.2021 08:10

Чтобы получить уникальный идентификатор, связанный с вашим устройством, вы можете использовать следующий код:

import android.telephony.TelephonyManager;
import android.content.Context;
// ...
 TelephonyManager telephonyManager;
  telephonyManager = (TelephonyManager) getSystemService(Context.
                TELEPHONY_SERVICE);
        /*
      * getDeviceId() returns the unique device ID.
       * For example,the IMEI for GSM and the MEID or ESN for CDMA phones.
         */
            String deviceId = telephonyManager.getDeviceId();
         /*
       * getSubscriberId() returns the unique subscriber ID,
         * For example, the IMSI for a GSM phone.
          */
           String subscriberId = telephonyManager.getSubscriberId();

Безопасный Android ID

String androidId = Settings.Secure.getString(getContentResolver(),
                 Settings.Secure.ANDROID_ID);

IMEI и Android ID не будут работать в Android 10, так как они ограничены

Amin Pinjari 03.10.2019 08:45

Поскольку требование для большинства приложений - идентифицировать конкретную установку, а не физическое устройство, хорошее решение для получения уникального идентификатора для пользователя, если использовать класс UUID. Следующее решение было представлено Рето Мейером из Google в презентации Google I / O:

private static String uniqueID = null;
private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
public synchronized static String id(Context context) {
   if (uniqueID == null) {
      SharedPreferences sharedPrefs = context.getSharedPreferences(
         PREF_UNIQUE_ID, Context.MODE_PRIVATE);
      uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);
      if (uniqueID == null) {
         uniqueID = UUID.randomUUID().toString();
         Editor editor = sharedPrefs.edit();
     editor.putString(PREF_UNIQUE_ID, uniqueID);
     editor.commit();
     }
   }
   return uniqueID;
}

Метод UUID.randomUUID () генерирует уникальный идентификатор для конкретной установки. Вам просто нужно сохранить это значение, и ваш пользователь будет идентифицирован при следующем запуске вашего приложения. Вы также можете попробовать связать это решение со службой Android Backup, чтобы информация оставалась доступной для пользователя, даже если он установит ваше приложение на другое устройство.

Вы можете узнать больше на https://medium.com/@ssaurel/how-to-retrieve-an-unique-id-to-identify-android-devices-6f99fd5369eb

Ниже приведен код, который я использовал в своем проекте.

Чтобы получить Уникальный Идентификатор Android

 static String androidID = Settings.Secure.getString(MyApplication.getContext().getContentResolver(), Settings.Secure.ANDROID_ID);

Я использовал это как глобальное, поэтому могу использовать в любом месте своего проекта

В Android 10 у вас не может быть доступа к идентификаторам устройств, которые не могут быть сброшены, таким как IMEI, MEID и т. д.

Поэтому я думаю, что ваш лучший шанс - создать UUID. Вы можете сделать это, используя приведенный ниже код и сохранив этот UUID в базе данных или файле настроек.

   String uniqueID = UUID.randomUUID().toString();

Как случайное число, каждый раз, когда вы вызываете этот метод, он будет возвращать другой код, и я думаю, что это не вы ищете.

Чтобы получить «уникальный идентификатор» из UUID, лучше всего использовать приведенный ниже код. Он будет работать нормально, но в документации также предлагается избегать использования Android_ID.

   String androidId = Settings.Secure.getString(context.getContentResolver(),
            Settings.Secure.ANDROID_ID);

   UUID androidId_UUID = UUID
            .nameUUIDFromBytes(androidId.getBytes("utf8"));

Этот код даст вам почти уникальный код, потому что, если пользователь выполнит сброс настроек до заводских, этот номер будет изменен.

Я ищу другой способ получить уникальный идентификатор, но до сих пор не нашел.

Вот некоторая документация для разработчиков Android, которая должна быть полезна. Хорошие практики для определения уникального идентификатора https://developer.android.com/training/articles/user-data-ids

Как определить уникальный идентификатор на основе вашего варианта использования:

https://developer.android.com/training/articles/user-data-ids#common-use-cases

Надеюсь, это может кому-то помочь.

Другие вопросы по теме