Android studio get imei

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

Androif BlueTooth ID
По аналогии с Wi-Fi мак-адресом, может взять и голубозубый мак. (требуются права android.permission.BLUETOOTH и, возможно, включенный адаптер)

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

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

Источник

Как получить IMEI / ESN устройства программно в android?

Чтобы однозначно идентифицировать каждое устройство, я хотел бы использовать IMEI (или номер ESN для устройств CDMA). Как получить доступ к этому программному обеспечению?

Вы хотите вызвать android.telephony.TelephonyManager.getDeviceId() .

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

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

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

Читайте также:  Мегафон как скрыть свой номер андроид

Обновление. Как уже упоминалось в комментариях ниже, это не безопасный способ аутентификации пользователей и вызывает проблемы конфиденциальности. Это не рекомендуется. Вместо этого просмотрите API входа в Google+, если вы хотите внедрить систему входа без трения.

API Android Backup также доступен, если вы просто хотите, чтобы облегченный способ сохранить набор строк, когда пользователь сбрасывает свой телефон (или покупает новое устройство).

В дополнение к ответу Тревора Джонса вы можете использовать его следующим образом:

И вы должны добавить следующее разрешение в свой файл Manifest.xml:

В эмуляторе вы, вероятно, получите значение «00000 …». GetDeviceId () возвращает NULL, если идентификатор устройства недоступен.

Я использую следующий код для получения IMEI или использования Secure.ANDROID_ID в качестве альтернативы, когда устройство не имеет возможности телефона:

Или вы можете использовать параметр ANDROID_ID из Android.Provider.Settings.System (как описано здесь strazerre.com ).

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

Для справки вот код из блога:

Замечание по внедрению : если идентификатор имеет решающее значение для архитектуры системы, вам нужно знать, что на практике некоторые из телефонов и планшета с очень низким уровнем конца были найдены повторно, используя тот же ANDROID_ID (9774d56d682e549c – это значение, отображаемое в наших журналах)

Следующий код помогает в получении номера IMEI для устройств Android:

Разрешения, требуемые в Android Manifest:

ПРИМЕЧАНИЕ. В случае таблеток или устройств, которые не могут действовать как мобильный телефон, IMEI будет иметь значение NULL.

Получить IMEI (международный идентификатор мобильного оборудования)

Получить уникальный идентификатор устройства

Обновить:

Для уникальной идентификации устройств вы можете использовать Secure.ANDROID_ID .

Старый ответ:

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

  • IMEI зависит от слота Simcard устройства, поэтому невозможно получить IMEI для устройств, которые не используют SIM-карту. В устройствах Dual sim мы получаем 2 разных IMEI для одного и того же устройства, так как у него есть 2 слота для simcard.

Вы можете использовать строку MAC-адреса WLAN (не рекомендуется для Marshmallow и Marshmallow +, поскольку MAC-адрес WLAN устарел на Marshmallow вперед, поэтому вы получите фиктивное значение)

Мы также можем получить уникальный идентификатор для телефонов Android, используя MAC-адрес WLAN. MAC-адрес уникален для всех устройств и работает для всех видов устройств.

Преимущества использования MAC-адреса WLAN в качестве идентификатора устройства:

Это уникальный идентификатор для всех типов устройств (смартфонов и планшетов).

Он остается уникальным, если приложение переустановлено

Недостатки использования MAC-адреса WLAN в качестве идентификатора устройства:

Дайте вам бонусное значение от Зефира и выше.

Если устройство не имеет wifi-оборудования, тогда вы получаете нулевой MAC-адрес, но обычно видно, что большинство устройств Android имеют аппаратное обеспечение wifi, и на рынке почти нет устройств с отсутствием оборудования Wi-Fi.

ИСТОЧНИК: technetexperts.com

Метод getDeviceId () TelephonyManager возвращает уникальный идентификатор устройства, например IMEI для GSM и MEID или ESN для телефонов CDMA. Возвращает null, если идентификатор устройства недоступен.

Читайте также:  Magisk модифицируем прошивку android с комфортом

Код Java

XML

Требуется разрешение READ_PHONE_STATE в файле манифеста.

Для Android 6.0+ игра изменилась, поэтому я предлагаю вам использовать это;

Лучший способ пойти – во время выполнения, иначе вы получите ошибки разрешения.

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

Использование ниже кода дает вам номер Imi

Для уровня API 11 или выше. TelephonyManager.PHONE_TYPE_SIP: возвращает «SIP»;

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); textDeviceID.setText(getDeviceID(telephonyManager));

Как и в API 26, getDeviceId () обесценивается, поэтому вы можете использовать следующий код для обслуживания API 26 и более ранних версий

Не забудьте добавить запрос разрешения для «READ_PHONE_STATE» для использования вышеуказанного кода.

Источник

Getting IMEI from an Android device using React Native

The International Mobile Equipment Identity (better known by its acronym IMEI) is a number, usually unique, which identifies mobile phones. It is usually printed inside the battery slot, however you can also print it on the screen by typing *#06#.

This number also can be obtained, having the respective permissions of the Android OS, from an application. This time we’ll do it from an React Native application.

Prior to the process, you must ensure that you have an updated version of npm:

Later, if you still do not have the create-react-native-app package installed, install it as follows:

Start by creating the react native project with the following statement:

Next, go to the project directory that you just created:

And prove that the application runs successfully:

Depending on where you are going to test our application, select the interactive CLI option that is shown after executing yarn start.

For this example we will use an Android emulator (Option a).

The device screen will present something like the following:

react-native-imei

It is a React Native library that allows us to easily obtain the IMEI, as long as the application is running on an Android device and has the READ_PHONE_STATE permission. This is the library that we’re going to use for our example.

Integrating react-native-imei to our project

To add the library for our example project, run the following command:

Since react-native-device-imei is a library that includes native code, you must link it to our application.

Prior to the link to the native library, you need to eject from the CRNA application (Create React Native App) to convert it into a React Native Regular application. The steps to follow are described in the CRNA official documentation. The output of the process will look similar to the following:

After performing the eject process, you can link the library:

The output will be similar to the following:

Once the library is linked, you can use it; for this, modify the App.js file that is in the project’s root directory.

Читайте также:  Яндекс таксометр через андроид авто

First, modify the render function so that it shows a button ( TouchableOpacity) which, after clicking on it, will show the device IMEI in a text field.

In addition to this, initialize DeviceIMEI as part of the state in the App component’s constructor:

Finally, implement the function getDeviceIMEI which contains the logic to get the device IMEI:

After performing all the steps above, the complete file will look like this:

Testing the operation in an emulator

To test the operation of the app, open the android/ directory in Android Studio.

The next step is to start Metro Bundler by yarn start:

As a final step, run the app in an emulator from Android Studio, the directory will be recognized as an Android project:

When pressing the CLICK HERE TO GET DEVICE IMEI button, you’ll obtain the device IMEI:

Final words

Even though the integration of React Native with features and resources specific to the Android system is not as trivial as if it were a 100% native project, it is not impossible if we use the right third-party libraries which facilitate work and if we get advise from more experienced people in the React Native field.

For you to have a better guide, the code that has been worked on when writing this article is in the following repository:

AlturaSoluciones/ReactNativeIMEI

Contribute to ReactNativeIMEI development by creating an account on GitHub.

If you liked this article, please applaud as many times as you wish. You can also read this article in Spanish. To see similar stories about technology, look at our publications. Do not hesitate to leave us in the comments box any concerns or suggestions you may have.

If you need a great team that will advise you in expressing your ideas in React JS or React Native, do not hesitate to contact us. You can go to our website and fill out the form and we will contact you as soon as possible.

Troubleshooting

Problem: When creating the application using create-react-native-app, the following message appears at the end:

Cause: Usually it is because the create-react-app package uses (updated at the time of writing this publication) a discontinued version of Yarn. This message is found in the initial lines after executing the create-react-app command:

Solution: Update the Yarn version as suggested in the following lines:

And verify that the version of Yarn is updated:

If the Yarn version has not changed, you can force the update to a specific version, the most recent stable version (1.7.0 at the time of writing this article)

And verify the version again.

Next, delete the directory created that gave the error:

Finally, create the application again:

Cause: The react-native-cli module is not installed in your system.

Solution: Install the module using NPM:

Источник

Оцените статью