что такое android id в android studio

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;

Android 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);

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();

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

Номер 7
Вариация всех предыдущих методов. Самый простой вариант – получить все вышеописанные идентификаторы, сложить в одну строку и взять md5 хеш от этой строки.

Источник

Разница между «@ id /» и «@ + id /» в Android

что такое android id в android studio. Смотреть фото что такое android id в android studio. Смотреть картинку что такое android id в android studio. Картинка про что такое android id в android studio. Фото что такое android id в android studio

Являются ли @id/ и @android:id/ одинаковыми?

Больше информации

Согласно вашим разъяснениям в чате, вы сказали, что у вас есть такая проблема:

Если мы используем android:id=»@id/layout_item_id» это не сработает. Вместо этого @+id/ работает так, в чем разница здесь? И это был мой оригинальный вопрос.

Больше информации снова

Как вы сказали в своем чате, обратите внимание, что android:layout_below=»@id/myTextView» не распознает элемент с id myTextView если он написан после того элемента, в котором вы его используете.

Знак + – это сокращение, чтобы добавить идентификатор в список идентификаторов ресурсов. В противном случае вы должны иметь их в XML-файле, подобном этому

Иногда вы видите ссылки в ваших файлах макетов, например:

.. Я рад, что ты спросил ☺

«+» Означает создание символа, если он еще не существует. Вы не нуждаетесь в этом (и не должны его использовать) при ссылке на android: символы, потому что они уже определены для вас платформой, и вы все равно не можете сделать свой собственный в этом пространстве имен.

Полностью скопирован из этого источника

Вкратце

+ Id Plus указывает, что андроид добавляет или создает новый идентификатор в ресурсах.

Он просто помогает ссылаться на уже сгенерированный идентификатор.

Это, как мне кажется, должно быть разрешено как можно скорее, потому что оно может (и по опыту) заманить некоторых разработчиков в мысли, что в их синтаксисе что-то не так, и попытайтесь отладить его, даже если отлаживать нечего.

@ Id / и @android: id / не то же самое.

@ Id / reference ID в вашем приложении, @android: id / ссылка на элемент в платформе Android.

Из руководства разработчика :

Android использует некоторые файлы, называемые ресурсами, где значения хранятся для файлов XML.

Теперь, когда вы используете @ id / для объекта XML, он пытается ссылаться на идентификатор, который уже зарегистрирован в файлах значений. С другой стороны, когда вы используете @ + id /, он регистрирует новый идентификатор в файлах значений, что подразумевается символом «+».

Надеюсь это поможет :).

Если элемент представления выполняет ту же операцию, вы можете использовать @ + id для каждой записи в любом макете, потому что во время компиляции нескольких @ + id / foo файл R.java создает только одно перечисление. Например, если у меня есть кнопка сохранения на каждой странице, которая выполняет ту же операцию, я использую android: в каждом макете. Файл R.java имеет только одну запись для кнопки button_save.

Разница между «@ id /» и «@ + id /» в Android

Первый используется для создания идентификатора конкретного компонента ui, а другой используется для ссылки на конкретный компонент

Источник

Подводные камни идентификации Android-устройства

что такое android id в android studio. Смотреть фото что такое android id в android studio. Смотреть картинку что такое android id в android studio. Картинка про что такое android id в android studio. Фото что такое android id в android studio

Некоторым разработчикам может понадобится идентифицировать Android-устройства своих пользователей. Чаще всего это делается не для того чтобы распознать именно девайс, а для определения конкретной установки приложения. Также я встречала несколько кейсов, когда это было необходимо, если у разработчика появлялось несколько приложений и он хотел понимать, что они работают в одной среде.

Гугл говорит, что идентифицировать устройство очень просто. Но мы же говорим об Android:)

Данная статья ориентирована на приложения или библиотеки, которые не хотят привязываться к гугловым сервисам.

Итак, давайте погрузимся в это чудесное приключение по получению уникального идентификатора устройства.

Тут мы видим несколько путей:

Advertising ID

Это уникальный для пользователя рекламный идентификатор, предоставляемый службами Google Play. Он необходим для работы рекламы, чтобы Google понимал, какую рекламу можно показывать конкретному пользователю и какая реклама уже была показана с помощью встроенных в приложения рекламных баннеров. А так же это значит, что вы лишитесь этого идентификатора, если ваше приложение будет скачано, к примеру, с Amazon, а помимо этого вам придется втащить в ваше приложение гугловые библиотеки.

Вывод: мы не идентифицируем устройство во всех случаях.

Но мы же хотим наверняка, верно? Тогда идем дальше.

Это международный идентификатор мобильного оборудования, используемый на телефонах стандарта GSM. Номер IMEI используется сетями для идентификации смартфонов и блокировки доступа в сеть украденных или занесенных в черный список девайсов. Но к сожалению с IMEI может возникнуть ряд проблем:

Вывод: мы не идентифицируем устройство во всех случаях и нас еще и могут обмануть:C

MAC-address

It may be possible to retrieve a Mac address from a device’s WiFi or Bluetooth hardware. We do not recommend using this as a unique identifier. To start with, not all devices have WiFi. Also, if the WiFi is not turned on, the hardware may not report the Mac address.

Serial Number

Считается уникальным серийным номером устройства, который остается с ним до “самого конца”. Получить его можно таким способом:

А теперь про проблемы. Во-первых, для получения серийного номера потребуется запросить у пользователя разрешение READ_PHONE_STATE, а пользователь может отказать. Во-вторых, серийный номер можно изменить.

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

Android ID

— Вот оно! — должны завопить мы. — Решение всех наших бед!

Android ID — это тоже уникальный идентификатор устройства. Представляет из себя 64-разрядную величину, которая генерируется и сохраняется при первой загрузке устройства.
Получить его можно вот так:

Казалось бы, такая короткая строчка избавляет нас от головной боли по идентификации устройства. Даже ребята из гугл использую Android_ID для LVL в примере.

И тут наши надежды рушатся и ничто уже не будет прежним. После обновления на Android 8 Android_ID теперь стал уникальным для каждого установленного приложения. Но, помимо этого, гугл ведь заботится о нас, так что приложения, которые были установлены до обновления останутся с прежними одинаковыми идентификаторами, которые гугл сохраняет с помощью специально написанного для этого сервиса. Но если приложение будет удалено, а затем заново установлено — Android_ID будет разным. Для того чтобы это не произошло, нужно использовать KeyValueBackup.

что такое android id в android studio. Смотреть фото что такое android id в android studio. Смотреть картинку что такое android id в android studio. Картинка про что такое android id в android studio. Фото что такое android id в android studio
Но этот backup сервис нужно зарегистрировать, еще и package name указать. Более того, в документации написано, что это может не сработать по любой причине. И кто в этом виноват? Да никто, просто вот так.

Общий вывод

Если у вас хороший бекенд, то просто собирайте слепок устройства (установленные приложения, сервисы, любые данные об устройстве, которые можете достать) и сравнивайте параметры уже там, какой-то процент изменений считайте приемлемым.

Источник

Как я могу назначить идентификатор для представления программно?

Я думаю, что setId() не совпадает с назначением по умолчанию. setId() является дополнительным.

Кто-нибудь может меня исправить?

Обзор id Android

Назначить id через XML

Назначить id по коду (программно)

Единственность id s

Когда (и почему) конфликтующие id не имеют значения

Динамическое создание представлений и присвоение ID

Запросите эти дочерние представления, используя placeholder.findViewById (удобныйInt);

В API 17 представлен View.generateViewId() который позволяет вам генерировать уникальный идентификатор.

Зарезервируйте XML android:id для использования в коде

API 17 представил View.generateViewId() который генерирует уникальный идентификатор. (Спасибо за возможные шансы-внести изменения, указав это.) *

Если ваша ViewGroup не может быть определена через XML (или вы не хотите, чтобы она была), вы можете зарезервировать идентификатор через XML, чтобы убедиться, что он остается уникальным:

Здесь значения / ids.xml определяют пользовательский id :

Затем, как только ViewGroup или View будут созданы, вы можете добавить пользовательский идентификатор

Конфликтный пример id

Для ясности с помощью примера обфускации давайте рассмотрим, что происходит, когда существует конфликт id за кулисами.

макет / mylayout.xml

Далее, MyActivity.java определяет некоторые добавления представлений программным способом (через код):

Таким образом, у placeholder и одного из наших новых TextView есть id из 12! Но это не проблема, если мы запрашиваем дочерние представления заполнителя:

Идентификатор не должен быть уникальным в иерархии этого представления. Идентификатор должен быть положительным числом.

Таким образом, вы можете использовать любое положительное целое число, которое вам нравится, но в этом случае могут быть некоторые представления с эквивалентными идентификаторами. Если вы хотите найти какое-то представление в иерархии, вызов может быть полезным при вызове setTag с некоторыми ключевыми объектами.

Источник

Получение AndroidID в мобильном приложении

Привет сообщество! На одном из проектов у меня встала задача организовать связку 1 пользователь = 1 мобильное устройство (под управлением Android), т.е. запретить вход с разных устройств под одним пользователем. Логично, что я решил использовать AndroidID в качестве идентификатора, однако быстрый поиск в гугле меня озадачил, оказалось, что на текущий момент штатными средствами мобильной платформы его не получить. На глаза попались отличные статьи от Дмитрия Васильева (за что ему огромный респект, статьи раз, два и три), где очень подробно описано как взаимодействовать со сторонними приложениями через Intent, поэтому расписывать код не буду, смотрите исходники). Я перебрал добрый десяток приложений в маркете от самых простых до более навороченных, но так и не смог найти приложение, которое бы поддерживало передачу значения в Intent. Что же придется писать свое приложение, по сути это мое первое приложение на Android, и оно максимально простое, но свою задачу оно выполняет, определяет, а главное возвращает в 1С значение.

Главный экран приложения (для первоначального занесения идентификатора в 1С)

что такое android id в android studio. Смотреть фото что такое android id в android studio. Смотреть картинку что такое android id в android studio. Картинка про что такое android id в android studio. Фото что такое android id в android studio

Ну и конечный результат:

что такое android id в android studio. Смотреть фото что такое android id в android studio. Смотреть картинку что такое android id в android studio. Картинка про что такое android id в android studio. Фото что такое android id в android studio

В архиве само приложение (apk) и исходники, также есть на гитхабе (AntSidorov)

Надеюсь сэкономлю кому-нибудь немного времени, всем успехов!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *