Существует ли уникальный идентификатор устройства Android?

Это происходит потому, что вы переопределяете неправильный метод. Если вы переопределяете

     public void init(ServletConfig config) throws ServletException {
        super.init(config);
            ServletContext sc = getServletContext(); 
     }

Вместо переопределения init(ServletConfig) просто переопределите метод ниже, и он будет вызываться GenericServlet.init(ServletConfig config)

 public void init() throws ServletException {
 ServletContext sc = getServletContext(); 
}
2591
задан alamshahbaz16497 30 January 2018 в 01:18
поделиться

6 ответов

Settings.Secure#ANDROID_ID возвращает Android ID как уникальную для каждого пользователя 64-битную шестнадцатеричную строку.

import android.provider.Settings.Secure;

private String android_id = Secure.getString(getContext().getContentResolver(),
                                                        Secure.ANDROID_ID); 
1932
ответ дан 22 November 2019 в 19:51
поделиться

Да, Каждое устройство на базе Android имеют уникальные порядковые номера, от которых Вы можете способный получить его ниже кода. Сборка. ПОСЛЕДОВАТЕЛЬНЫЙ, Но примечание, что это было только добавлено на уровне API 9, и это не может присутствовать на всех устройствах. Для получения уникального идентификатора на более ранних платформах необходимо будет считать что-то как MAC-адрес или IMEI.

0
ответ дан Stephan J 14 September 2019 в 15:59
поделиться

ОБНОВЛЕНИЕ : в последних версиях Android многие проблемы с ANDROID_ID были решены, и я считаю, что в таком подходе больше нет необходимости. Взгляните на ответ Энтони .

Полное раскрытие: в моем приложении изначально использовался описанный ниже подход, но он больше не используется, и теперь мы используем подход, описанный в блоге разработчиков Android , в котором ответ emmby ссылается на (а именно, создание и сохранение UUID # randomUUID () ).


На этот вопрос есть много ответов, большинство из которых сработает лишь «иногда», и, к сожалению, этого недостаточно.

На основе моих тестов устройств (все телефоны, хотя бы один из которых не активирован):

  1. Все протестированные устройства вернули значение для TelephonyManager.getDeviceId ()
  2. Все устройства GSM (все протестированные с SIM-картой) вернул значение для TelephonyManager.getSimSerialNumber ()
  3. Все устройства CDMA вернули значение null для getSimSerialNumber () (как и ожидалось)
  4. Все устройства с добавленной учетной записью Google вернули значение для ANDROID_ID
  5. Все устройства CDMA вернули одно и то же значение (или производное от одного и того же значения) для обоих ANDROID_ID и TelephonyManager.getDeviceId () - если учетная запись Google была добавлена ​​во время настройки.
  6. У меня еще не было возможности протестировать устройства GSM без SIM-карты, устройство GSM без добавленной учетной записи Google или какое-либо из устройств в режиме полета.

Итак, если вам нужно что-то уникальное для самого устройства, TM.getDeviceId () должно быть достаточно . Очевидно, что некоторые пользователи более параноики, чем другие, поэтому может быть полезно хешировать 1 или несколько из этих идентификаторов, чтобы строка по-прежнему была фактически уникальной для устройства, но не определяла явным образом фактическое устройство пользователя. Например, использование String.hashCode () в сочетании с UUID:

final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);

final String tmDevice, tmSerial, androidId;
tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
String deviceId = deviceUuid.toString();

может привести к примерно так: 00000000-54b3-e7c7-0000-000046bffd97

Он работает достаточно хорошо для меня.

Как Ричард упоминает ниже, не забывайте, что вам нужно разрешение на чтение свойств TelephonyManager , поэтому добавьте это в свой манифест:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

import libs

import android.content.Context;
import android.telephony.TelephonyManager;
import android.view.View;
1123
ответ дан 22 November 2019 в 19:51
поделиться

Также вы можете рассмотреть MAC-адрес адаптера Wi-Fi. Получено таким образом:

WifiManager wm = (WifiManager)Ctxt.getSystemService(Context.WIFI_SERVICE);
return wm.getConnectionInfo().getMacAddress();

Требуется разрешение android.permission.ACCESS_WIFI_STATE в манифесте.

Доступно, даже если Wi-Fi не подключен. Если бы Джо из приведенного выше ответа попробовал это на своих многочисленных устройствах, это было бы хорошо.

На некоторых устройствах он недоступен, когда Wi-Fi отключен.

ПРИМЕЧАНИЕ. Из Android 6.x он возвращает согласованный поддельный MAC-адрес: 02: 00: 00: 00: 00: 00

103
ответ дан 22 November 2019 в 19:51
поделиться

Для получения идентификатора пользователя, можно использовать Google Play Licensing Library.

Для загрузки этой библиотеки открывают SDK Manager => SDK Tools. Путь к загруженным файлам библиотеки:

path_to_android_sdk_on_your_pc/extras/google/market_licensing/library

Включает библиотеку в Ваш проект (можно просто скопировать его файлы).

Следующий Вам нужна некоторая реализация Policy интерфейс (можно просто использовать один из двух файлов из библиотеки: ServerManagedPolicy или StrictPolicy).

идентификатор пользователя будет предоставлен Вам в processServerResponse() функция:

public void processServerResponse(int response, ResponseData rawData) {
    if(rawData != null) {
        String userId = rawData.userId
        // use/save the value
    }
    // ...
}

Следующий необходимо создать LicenseChecker с политикой и вызовом checkAccess() функция. Используйте MainActivity.java в качестве примера того, как сделать это. MainActivity.java расположен в этой папке:

path_to_android_sdk_on_your_pc/extras/google/market_licensing/sample/src/com/example/android/market/licensing

[1 120] не забывают добавлять разрешение CHECK_LICENSE к Вашему AndroidManifest.xml.

[еще 1121] о Лицензировании Библиотеки: https://developer.android.com/google/play/licensing

0
ответ дан 22 November 2019 в 19:51
поделиться
android.telephony.TelephonyManager.getDeviceId()

Это возвратится, любая строка однозначно определяет устройство (IMEI на GSM, MEID для CDMA).

Вам будет нужно следующее разрешение в Вашем AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
0
ответ дан 22 November 2019 в 19:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: