Перейти к содержанию

Лидеры


Популярный контент

Показан контент с высокой репутацией за 22.08.2020 во всех областях

  1. 3 балла
    набросал подробную инструкцию как делал на 10.3 собрав инфу с комментариев: !!! Иконки в AppIcon.appiconset должны быть без прозрачности и альфа-канала, иначе получите ошибку ITMS-90717:Invalid App Store Icon. 1. распаковываем iOS1024fix.zip 2. заменяем иконки в asset_catalog\Assets.xcassets\AppIcon.appiconset\ и asset_catalog\Assets.xcassets\LaunchScreenImage.imageset\ 3. если надо меняем цвет фона в asset_catalog\Assets.xcassets\LaunchScreenBackgroundColor.colorset\Contents.json 4. копируем папку asset_catalog на мак 5. в терминале перейти в неё, если скопировали на рабочий стол команда: cd desktop/asset_catalog 6. выполняем команду: actool --output-format human-readable-text --notices --warnings --app-icon AppIcon --output-partial-info-plist compilation_results/partial_Info.plist --target-device iphone --target-device ipad --minimum-deployment-target 11.0 --platform iphoneos --product-type com.apple.product-type.application --compile "compilation_results" "Assets.xcassets" в asset_catalog\compilation_results появятся 4 файла 7. копируем папку (или эти 4 файла) обратно c мака 8. в delphi компилируем ipa (Release / iOS Device 64-bit / Application Store) 9. Для удобства создадим папку "ios1024" в папке проекта 10. копируем файл iOSDevice64\Release\<ИмяПроекта>.Info.plist в папку "ios1024" убрав из имени "<ИмяПроекта>.", имя файла должно быть "Info.plist", регистр важен! 11. копируем из asset_catalog\compilation_results 4 файла в папку "ios1024" 12. копируем папку LaunchScreen.storyboardc в "ios1024" (именно папку а не её содержимое) 13. Редактируем Info.plist 13.1. Меняем: <key>CFBundleIconFiles</key> <array> <string>ios_app_ico57</string> <string>ios_app_ico87</string> <string>ios_app_ico114</string> <string>ios_app_ico1024</string> <string>ios_app_ico60</string> <string>ios_app_ico120</string> <string>ios_app_ico180</string> <string>ios_spot_29</string> <string>ios_spot_40</string> <string>ios_spot_58</string> <string>ios_spot_80</string> <string>ios_spot_120</string> </array> на <key>CFBundleIcons</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon60x60</string> </array> <key>CFBundleIconName</key> <string>AppIcon</string> </dict> </dict> <key>CFBundleIcons~ipad</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon60x60</string> <string>AppIcon76x76</string> </array> <key>CFBundleIconName</key> <string>AppIcon</string> </dict> </dict> 13.2. Удаляем в двух местах строки: <key>CFBundleResourceSpecification</key> <string>ResourceRules.plist</string> 13.3. После строк: <key>DTPlatformName</key> <string>iphoneos</string> добавляем: <key>DTPlatformVersion</key> <string>13.5</string> 14. Заходим в delphi->Project->Deploment 15. Проверяем что бы выбран "iOS Device 64-bit" 16. Снимаем галочки с: (имена файлов будут ваши, ориентируйтесь по Option->Application->Icons) 17. в Deploment добавляем все файлы папки "ios1024" 18. изменяем Remote Path 5-и строкам: 19. компилируем IPA и отправляем через Transporter на маке !!! При изменении версии билда в проекте не забываем изменить его в CFBundleVersion "ios1024"\Info.plist iOS1024fix.zip
  2. 3 балла
    slav_z

    Symbol 'Release' is deprecated

    Release уже давно объявлен как deprecated. Release позволяет выполнить отложенное удаления объекта (удалить, но не прям сейчас). Если это вам действительно нужно (иногда позволяет избежать некоторых ошибок), то просто повторите его код. Но пока его окончательно не убрали, лучше пользоваться существующим методом. Ругается и ругается - бог с ним. Если надо просто удалить объект, то Free, если с обнулением ссылки то FreeAndNil или Free + присвоить nil в коде (как у вас).
  3. 2 балла
    dnekrasov

    HTML парсер для Firemonkey

    как-то так uses System.RegularExpressions; ... const AHREF = '<a href="([^"]*)"[^>]*>([^<]*)</a>'; var Match: TMatch; s: String; begin Match := TRegEx.Match(ваша HTML строка, AHREF); while Match.Success do begin // здесь что-то делаем //<a href"...>...</a> в Match.Value //Match.Groups[1] - адрес ссылки //Match.Groups[2] - отображаемый текст ссылки Match := Match.NextMatch; end; end
  4. 2 балла
    Alex7wrt

    9-Patch PNG FMX Generator

    Сделал небольшую программу-генератор 9-patch заставок. Достаточно выбрать цвет фона, логотип и его видимый размер, и программа сгенерирует 9-patch для всех необходимых в FMX размеров. Примеры Рисунок: Полученные 9-Patch png: Рисунок: Полученные 9-Patch png: Исходники: 9Patch Generator.zip
  5. 2 балла
    Vitaldj

    [FGX Native] Релиз!!!

    Для FGX другой форум: https://forum.fgx-native.com
  6. 2 балла
    krapotkin

    Гибкие аналоги TListBox и TListView

    вот мой вариант со свистелками
  7. 1 балл
    #WAMACO

    Баг масштабирования интерфейса в IDE 10.4

    Удалите манифест (tmp) и соберите опять
  8. 1 балл
    #WAMACO

    MSacc проблема с подключением

    киньте на форму компонент драйвера нужного движка БД и все будет ок! который с префиксом ....Phys..
  9. 1 балл
    не ClientToScreen а LocalToScreen... оно есть у фрейма... Пример: LocalToScreen(TPointF.Zero) - левый верхний угол фрейма в координатах экрана, LocalToAbsolute(TPointF.Zero) - левый верхний угол фрейма в координатах формы.
  10. 1 балл
    Slym

    отследить изменение файла

    https://yandex.ru/search/?text=findfirstchangenotification delphi&lr=237 https://yandex.ru/search/?text=ReadDirectoryChanges delphi
  11. 1 балл
    Доступ ко многим protected методам можно получить через интерфейсы: ClientToScreen доступен через IControl, т.е. любой контрол (Ctrl as IControl).ClientToScreen про поиск TCommonCustomForm - у всех контролов есть Root - TCommonCustomForm(Ctrl.Root.GetObject) (незабываем проверять nil :) ) еще есть Scene...
  12. 1 балл
    slav_z

    Android 11

    у меня sdk реально 29-тое... а не просто target изменил и все...
  13. 1 балл
    brunnengi

    Android 11

    Рад что помогло. Да, в 10.4 там всё норм. Потому и написал что фикс тока для 10.3.3
  14. 1 балл
    slav_z

    Toast message

    uses здесь лишние есть: uses System.SysUtils, System.IOUtils, System.Math, System.Messaging, FMX.Platform, FMX.Platform.Android, Androidapi.Helpers, Androidapi.JNI.Os, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Webkit, Androidapi.JNI.Net, Androidapi.JNIBridge, Androidapi.JNI.App, Androidapi.JNI.Support, Androidapi.JNI.Provider, Androidapi.JNI.Widget, Androidapi.JNI.Embarcadero; procedure ShowToast(const Text: string); begin TJToast.JavaClass.makeText(SharedActivityContext, StrToJCharSequence(Text),TJToast.JavaClass.LENGTH_LONG).show; end;
  15. 1 балл
    slav_z

    Android 11

    да.. вижу... ща попробую... заранее СПАСИБО!!!!! потом еще раз спасибо напишу когда получится....
  16. 1 балл
    brunnengi

    Android 10 (API уровня 29)

    Здравствуйте. Некоторые пользователи Delphi 10.3 столкнулись с тем что даже при указании SDK 29 в манифесте проекта, при запуске скомпилированного приложения на платформе Android 10 происходило его падение. В августе 30 числа 2020 года было дано решение как пофиксить эту проблему. Переход на версию Delphi 10.4 не для всех является приемлемым решением, по разным причинам, к примеру у кого то платные компоненты и нет возможности обновиться до актуальных версий. Ниже представлен перевод статьи. В конце будет ссылка на оригинал. Приведенное здесь решение нацелено на обновление функции 'dlopen' в файле 'ICU.inc' (он включен в файл 'System.pas'). Вот шаги, необходимые для решения указанной проблемы: Откройте проводник и перейдите в папку по следующему пути: C:\Program Files (x86)\Embarcadero\Studio\20.0\source Скопируйте файлы из архива "missing_source_files.zip", который приложен в посту, в папку source из пункта "1" (комментарий от переводчика: в "missing_source_files.zip" лежит папка "rtl" в которой две папки - "posix", "sys". Лично я сделал сначала backup папки rtl из папки source, что и вам советую. Затем скопировал rtl папку из "missing_source_files.zip" и вставил в папку source) Переходим по пути: C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\sys Открываем файл "ICU.inc" в текстовом редакторе (пожалуйста, сделайте backup файла 'ICU.inc' для пущей безопасности). (комментарий от переводчика: орудовать в этой папке без прав админа не вариант. Поэтому я советую сначала скопировать файл "ICU.inc" куда нибудь в другое место, к примеру в папку Documents и там уже открыть его в том же Блокноте и сделав необходимые изменения сохранить файл и затем уже переместить его в C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\sys с заменой) В текстовом редакторе надо изменить функцию InitICU: Было вот так: А сделать надо что было вот так: Сохраняем сделанные изменения в файле "ICU.inc" Возвращаемся в проводник и переходим в папку %USERPROFILE% Скопируйте файл "build.bat" из архива "build_script.zip" , который приложен в этому посту в папку из пункта 7. Запустите от имени Администратора файл "build.bat". (Он создаст папку %USERPROFILE%\build в которой будет несколько папок с файлами. Из них нам нужны будут только System.o, но об этом ниже) Возвращаемся в проводник и переходим в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\debug Скопируйте файл "System.o" из папки %USERPROFILE%\build\android\debug в папку из шага 10 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай). Теперь переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\release Скопируйте файл "System.o" из папки %USERPROFILE%\build\android\release в папку из шага 12 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай). Переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android64\debug Скопируйте файл "System.o" из папки %USERPROFILE%\build\android64\debug в папку из шага 14 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай). Переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android64\release Скопируйте файл "System.o" из папки %USERPROFILE%\build\android64\release в папку из шага 16 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай). На этом всё. Автор данного перевода лично прошел по всем шагам и сделал всё как было сказано, а также протестил на приложении что уже было в PlayMarket'е но не запускалось под Android 10. Я его обновил и запустил как на Android ниже 10, так и на Android 10. ЕСЛИ ВЫ НЕ ДОВЕРЯЕТЕ ПЕРЕВОДУ И/ИЛИ ВЫЛОЖЕННЫМ ФАЙЛАМ, ТО НИЖЕ ДАНА ССЫЛКА НА ОРИГИНАЛ СТАТЬИ // файлы выложенные здесь, взяты с форума где оригинал статьи. Ссылка на оригинал https://quality.embarcadero.com/browse/RSP-27218 Если нет логина, то под споллером скрины экрана с форума ссылки выше: Отдельное спасибо пользователю Stanislau Ihnatovich за сообщение в Telegram о том что есть решение build_script.zipmissing_source_files.zip
  17. 1 балл
    brunnengi

    Android 11

    Да, оно. Это приложение собиралось на Delphi 10.3.3 после фикса. Фикс должен был решить проблему именно с крашем на Android 10. Я предположил что и на Android 11 тоже попрет. Ниже ссылка на пост, там дается ссылку на форум fgx где есть руководство как сделать fix среды Delphi 10.3.3
  18. 1 балл
    gonzales

    [IOS]Notification.Number

    сорри, вместо &badge поставить цифру, которая должна отображаться
  19. 1 балл
    gonzales

    [IOS]Notification.Number

    Нужно внести изменение к код php сервера вместо строки $fields['notification'] = array('body' => $text, 'title' => $title); нужно вставить $fields['notification'] = array('body' => $text, 'title' => $title, 'sound' => 'default', 'badge' => $badge);
  20. 1 балл
    gonzales

    [IOS]Notification.Number

    Чтобы в iOS появилась наклейка с цифрой на иконке программы нужно добавить в JSON запроса пуша в объект notification пару badge=цифра
  21. 1 балл
    По итогу все срослось. Для сборки проекта в 10.4.1. необходимо удалить из папки с проектом папки iOSDevice64, LaunchScreen.TemplateiOS, и файлы Entitlement.TemplateiOS.xml и info.plist.TemplateiOS.xml. После чего пересобрать проект, создадутся новые файлы Entitlement.TemplateiOS.xml и info.plist.TemplateiOS.xml в которых будут необходимые директивы. У меня после этого пропали проблемы с размером экрана и AppStoreConnect без проблем съел мой ipa файл, при этом показал, что есть включенные материалы - значок приложения. А ТЕПЕРЬ ЛОЖЕЧКА КАКККИ))) При сборке приложения в 10.4.1 не применяется Заставка, включается стандартная, что бы я не делал, даже в новом пустом проекте, выставляю свою заставку, запускаю, а заставка все равно стандартная, также не работает цвет экрана заставки, корректно отрабатывают только иконки. Я порылся во всех местах, где это могло быть, вроде все правильно, в Deployment файлы правильные, на маке в папке LaunchScreenImage.imageset файлы правильные, а вот что должно быть дальше - не знаю(((
  22. 1 балл
    Tumaso

    Посоветуйте компонет

    @Ingalime 1. если высота фрейма зависит от данных, то да, вычисляйте высоту 2. по расположению создаваемых фреймов друго под другом - самый простой вариант использовать свойство Align у фреймов (устанавить в Top), для этого размещайте создаваемые фреймы на общем контейнере для них (например на VertScrollBox) условно говоря примерно так: procedure TForm1.AddFrame(const AParent: TFmxObject; const AData: TFrameData); var LFrame: TMyFrame; begin LFrame := TMyFrame.Create(Self); // или nil, если в дальнейшем будете сами уничтожать фреймы LFrame.Parent := AParent; LFrame.Align := TAlignLayout.Top; LFrame.Data := AData; // этим кодом предполагается заполнение фрейма данными, при котором фрейм заполнит выводимые компоненты и настроит свою высоту end; procedure TForm1.FillFrames; var I: Integer; begin for I := 0 to Data.Count - 1 do AddFrame(vsbFrames, Data[I]); // vsbFrames - TVertScrollBox для размещения фреймов, Data - список данных для отображения, каждый элемент - данные для отдельного фрейма end;
  23. 1 балл
    Maximus

    Ошибка E2512 Type parameter 'TArgument' must be a non-nullable value type

    В 10.4.1 починили. Главное чтобы следующим патчем не разломали.
  24. 1 балл
    Slym

    Сим карта

    обычный TCP... Sock:=TSocket.Create(TSocketType.TCP, TEncoding.GetEncoding(1251)); Sock.Connect('',FAddress,'',FPort); Sock.Send('cmd') result:=Sock.ReceiveString();
  25. 1 балл
    BeginUpdate и EndUpdate приносят счастье
  26. 1 балл
    У меня помогло так: procedure TForm1.FormResize(Sender: TObject); begin Memo1.WordWrap := false; Memo1.WordWrap := true; end; С Уважением Олег.
  27. 1 балл
    Надо по той ссылке, что я выложила написать гневный комментарий Марко Кенту. А вам спасибо!!!
  28. 1 балл
    Tumaso

    Посоветуйте компонет

    Другой вариант - использование TListView
  29. 1 балл
    Tumaso

    Посоветуйте компонет

    Я бы сделал шаблонный фрейм, в котором бы выводил текст с помощью TText (или TLabel или другой), если нужно выводить картинки - TImage и т.д. Далее для каждой карточки создаете свой экземпляр фрейма и в качестве параметров передаете значения отображаемых полей. Легко в реализации, гибко, работает на всех платформах, включая Linux через FmxLinux
  30. 1 балл
    Tumaso

    Гибкие аналоги TListBox и TListView

    Почему вы решили, что стандартный TListView не подойдет? Прекрасно подойдет. Посмотрите демо, идущее с делфи, в каталоге C:\Users\Public\Documents\Embarcadero\Studio\версия\Samples\Object Pascal\Multi-Device Samples\User Interface\ListView\VariableHeightItems. Для вашей задачи - идеальный старт
  31. 1 балл
    krapotkin

    Постоянная подпись маркера

    примерно так r := rectf( bmp.width *0.5, 0, bmp.width, bmp.height*0.5) поиграть с коэффициентами
  32. 1 балл
    krapotkin

    Постоянная подпись маркера

    я сделал больше чем пять на всякий случай а карту делать не стал - слишком много геморроя с ключами всякими думаю несложно добавить в код descriptor.Icon := bmp; bmp.7z
  33. 1 балл
    Slym

    Артефакты вокруг TLabel

  34. 1 балл
    krapotkin

    Постоянная подпись маркера

    ну и не вопрос есть модель данных. если она меняется, изменится и отображение. метод, создающий маркер, будет включать в себя и создание битмапа для него я не помню, можно ли заменять битмап на маркере, скорее всего - да, но если даже нет - удалили старый, создали новый, никто ничего и не заметит даже
  35. 1 балл
    krapotkin

    Постоянная подпись маркера

    почему не подходит? берем битмап, выводим на него текст хоть из ини, хоть из инитернета, и отдаем для создания маркера
  36. 1 балл
    Удалось найти решение самостоятельно. В этой ветке можно скачать недостающее dcu файлы для корректной работы
  37. 1 балл
    krapotkin

    MultiSelect в TDateEdit

    это почти невозможно реализовать В ОБЩЕМ 25.10.2020 - 27.10.2020 + 13.04.2021 - 21.04.2021 как это выбрать, оставаясь в одном экранчике? так что сделайте список выборов и каждый из них добавляйте с помощью одного компонента за образец дизайна можно взять например выбор дат для билетов на сайте ржд или где-то на продаже авиабилетов. все придумано до нас
  38. 1 балл
  39. 1 балл
    Идёшь по ссылке. Там инструкция на 4+ листа. К ней есть пара Вложенных архивов. Берёшь первый, где лежат иконки, распаковываешь. Подкладываешь свои (там по умолчанию стандартные дельфийские), плюс эту самую иконку - 1024 на 1024. потом это копируешь на комп с маком и xcode. Из командной строки запускаешь строку с длинными параметрами. По итогам в папке получаешь неск файлов, копируешь их на комп с дельфи, подкладываешь в файл проекта, вместе с файлами ещё одного архива, потом в параметрах деплоймента проекта отключаешь стандартные иконки, добавляешь штук 6 этих левых файлов, предварительно ещё правишь файл plist.info. Потом все это компилируешь и получаешь Новый ipa файл. Его и заливаешь на эпл стор. в инструкции все подробно написано. пробовал на 10.3.3 - работает.
  40. 1 балл
    gonzales

    поломались ПУШи в 10.4

    Нашел причину В Library path для Андроид64 добавил путь E:\Embarcadero\Studio\21.0\source\rtl\android, где собственно и лежит Androidapi.JNI.PlayServices.Tasks.pas и все заработало. Буду с iOS разбираться теперь
  41. 1 балл
    gonzales

    поломались ПУШи в 10.4

    Нашел причину, В недрах класса TPushService TPushService = class abstract public type TPropPair = TPair<string, string>; TPropArray = TArray<TPropPair>; // commonly used names TServiceNames = record public const GCM = 'gcm'; // deprecated 'Is not available anymore. Please use FCM instead'; // Google cloud messaging FCM = 'fcm'; // Google Firebase cloud messaging APS = 'aps'; // Apple end; Соответственно нужно исправить FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM); на FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.FCM); Все работает
  42. 1 балл
    Большое количество - это сколько? 100, 100 000, 100 000 000? Каждый раз увеличивая размер на один элемент, менеджер памяти ищет непрерывный незанятый кусок памяти такой длины, чтобы уместить все элементы. Хорошо если место под уже выделенный массив позволяет увеличить размер, не упираясь в участики памяти занятые другими данными. Иногда после очередного увеличения массива, уже выделенного участка памяти более не хватает. В таком случае менеджеру приходится искать новый, и копировать старые данные в новый участок памяти, а старый участок помечать как свободный. Разумеется это занимает время. Именно это и приводит к "не так быстро, как хотелось бы". Чтобы избежать этого: 1 Способ курильщика, простой: Увеличиваем размер массива не на 1 элемент, а сразу на 16/32/128/1024 элемента (вам виднее, в зависимости от того сколько у вас может быть элементов в массиве). Также заводим счетчик - номер последнего занятого элемента в массиве, и после каждого добавления - увеличиваем этот счетчик на единицу. Этот способ не избавит от проблемы, но будет приводить к менее частому перераспределению памяти. 2 Способ здорового человека, чуть сложнее: используйте указатели. Заведите массив указателей (либо TList), выделяйте место под каждую новую запись (ваш record) вручную, и помещайте указатель на него в ваш массив указателей (или в TList). Не забывайте освобождать выделенную память, когда ваши обьекты больше не нужны. Этот спобоб более правильный, так как в этом случае перераспределение происходит очень редко. Кстати, реализация TList использует внутри себя первый способ.
  43. 1 балл
    Ну вот набросал примерчик. Он упрощенный, но смысл такой же примерно (код листвью со скриншота выше выложить не могу просто из-за того, что там идут зависимости от модели данных). Лично я все рисую кодом - так полный контроль того, что выводится на экран. И собственно так можно выводить практически что угодно. И не нужны никакие монструозные ТМС компоненты ListView_Schedule_Sample.zip
  44. 1 балл
    mazayhin

    REST Client Library vs. THTTPClient

    THTTPClient - голый клиент, а в TREST... За вас сделана часть работы для работы по rest, и ну и преобразования результата в TDataSet. Внутри там тот же HttpClient
  45. 1 балл
    Равиль Зарипов (ZuBy)

    DropBox Rest

    на например можно вот так DropBox_test.rar UPDATE: Там не используется TRest** компоненты, я их не люблю. Поэтому написал по своему. В мемо показана картинка, другого ничего не было на дропбоксе, думаю разберетесь в коде
  46. 1 балл
    Равиль Зарипов (ZuBy)

    Работа с маркерами

    используйте правильные методы Form3.Close; Form5.Show; что на этих формах содержится? я бы на всякий случай весь код в событиях TMapView заключал бы в TThread.Synhronize(nil, procedure begin // тут код который нужно выполнить end);
  47. 1 балл
    Brovin Yaroslav

    [TMapView] кнопки на карте

    Нет
  48. 1 балл
    ophion

    Как получить IMEI?

    Дам вам подсказку из Android доков... public String getDeviceId () Added in API level 1 Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones. Return null if device ID is not available. Requires Permission: READ_PHONE_STATE public String getDeviceId (int slotId) Added in API level 23 Returns the unique device ID of a subscription, for example, the IMEI for GSM and the MEID for CDMA phones. Return null if device ID is not available. Requires Permission: READ_PHONE_STATE Parameters slotId of which deviceID is returned
  49. 1 балл
    Martifan

    Как получить IMEI?

    а для Android: Uses Androidapi.JNI.Telephony, Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText; function TfMain.GetMyImei: string; var TelephonyObj: JObject; TelephonyManager: JTelephonyManager; begin Result := ''; TelephonyObj := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE); TelephonyManager := TJTelephonyManager.Wrap((TelephonyObj as ILocalObject).GetObjectID); Result := JStringToString(TelephonyManager.getDeviceId); end;
  50. 1 балл
    xenon54

    Как получить IMEI?

    IOS не позволяет получить IMEI устройства.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...