пятница, 3 января 2014 г.

Получаем информацию об устройстве(Device Information)

Некоторые программисты задаются вопросом «Как получить информацию об устройстве? (желательно уникальную)». Как вы уже знаете, в Delphi есть папка с демо проектами, а в ней есть проект DeviceInfo. Его мы возьмём за основу, т.к. он подходит к теме этой заметки.
Базовый проект уже умеет определять название ОС, модель устройства и версию ОС. Добавим туда ещё 20 возможных пунктов:
- BOARD
- BOOTLOADER
- CPU_ABI
- CPU_ABI2
- DEVICE
- DISPLAY
- FINGERPRINT
- HARDWARE
- HOST
- ID
- MANUFACTURER
- MODEL
- PRODUCT
- RADIO
- SERIAL
- TAGS
- TIME
- &TYPE
- UNKNOWN
- USER

Upd (21.04.14). Проверил код на Delphi XE6 и добавил информацию о необходимых изменениях.
Открываем демо проект DeviceInfo.
В ListBox добавляем 20 ListBoxItem.
Находим блок кода, предназначенный для Android’а (он начинается с «{$IFDEF ANDROID}») и ниже по коду (примерно 104 строчка) находим «lbDeviceType.Text := Format('Device Type: %s', [JStringToString(TJBuild.JavaClass.MODEL)]);». После этой строчки, вставляем вот этот код:

  ListBoxItem1.Text := Format('BOARD: %s', [JStringToString(TJBuild.JavaClass.BOARD)]);
  ListBoxItem2.Text := Format('BOOTLOADER: %s', [JStringToString(TJBuild.JavaClass.BOOTLOADER)]);
  ListBoxItem3.Text := Format('CPU_ABI: %s', [JStringToString(TJBuild.JavaClass.CPU_ABI)]);
  ListBoxItem4.Text := Format('CPU_ABI2: %s', [JStringToString(TJBuild.JavaClass.CPU_ABI2)]);
  ListBoxItem5.Text := Format('DEVICE: %s', [JStringToString(TJBuild.JavaClass.DEVICE)]);
  ListBoxItem6.Text := Format('DISPLAY: %s', [JStringToString(TJBuild.JavaClass.DISPLAY)]);
  ListBoxItem7.Text := Format('FINGERPRINT: %s', [JStringToString(TJBuild.JavaClass.FINGERPRINT)]);
  ListBoxItem8.Text := Format('HARDWARE: %s', [JStringToString(TJBuild.JavaClass.HARDWARE)]);
  ListBoxItem9.Text := Format('HOST: %s', [JStringToString(TJBuild.JavaClass.HOST)]);
  ListBoxItem10.Text := Format('ID: %s', [JStringToString(TJBuild.JavaClass.ID)]);
  ListBoxItem11.Text := Format('MANUFACTURER: %s', [JStringToString(TJBuild.JavaClass.MANUFACTURER)]);
  ListBoxItem12.Text := Format('MODEL: %s', [JStringToString(TJBuild.JavaClass.MODEL)]);
  ListBoxItem13.Text := Format('PRODUCT: %s', [JStringToString(TJBuild.JavaClass.PRODUCT)]);
  ListBoxItem14.Text := Format('RADIO: %s', [JStringToString(TJBuild.JavaClass.RADIO)]);
  ListBoxItem15.Text := Format('SERIAL: %s', [JStringToString(TJBuild.JavaClass.SERIAL)]);
  ListBoxItem16.Text := Format('TAGS: %s', [JStringToString(TJBuild.JavaClass.TAGS)]);
  ListBoxItem17.Text := Format('TIME: %s', [IntToStr(TJBuild.JavaClass.TIME)]);
  ListBoxItem18.Text := Format('&TYPE: %s', [JStringToString(TJBuild.JavaClass.&TYPE)]);
  ListBoxItem19.Text := Format('UNKNOWN: %s', [JStringToString(TJBuild.JavaClass.UNKNOWN)]);
  ListBoxItem20.Text := Format('USER: %s', [JStringToString(TJBuild.JavaClass.USER)]);

UPDATE (21.04.14):
Чтобы код заработал в Delphi XE6, необходимо:
в "uses" заменить модуль "Androidapi.JNI.JavaTypes" на "Androidapi.Helpers".

Сохраняем и запускаем проект.
Исходный код проекта: Скачать с Google Drive

3 комментария:

  1. Здравствуйте Андрей.
    Почему ругается Делфи 10 Сиэтл на функцию JStringToString? Как это обойти или исправить?
    С Уважением. Олег.

    ОтветитьУдалить
  2. Здравствуйте Андрей.
    Почему ругается Делфи 10 Сиэтл на функцию JStringToString? Как это обойти или исправить?
    С Уважением. Олег.

    ОтветитьУдалить
  3. "необходимо: в "uses" заменить модуль "Androidapi.JNI.JavaTypes" на "Androidapi.Helpers"." Это и для Seattle нужно сделать. После этой манипуляции не ругается.

    ОтветитьУдалить