Перейти к содержанию
Fire Monkey от А до Я

Лидеры

  1. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      12

    • Постов

      2 517


  2. Brovin Yaroslav

    Brovin Yaroslav

    Администраторы


    • Баллы

      9

    • Постов

      2 124


  3. Andrey Efimov

    Andrey Efimov

    Модераторы


    • Баллы

      7

    • Постов

      851


  4. Rusland

    Rusland

    Пользователи


    • Баллы

      6

    • Постов

      1 204


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

Показан контент с высокой репутацией 15.09.2016 в Сообщения

  1. Brovin Yaroslav

    Проблема в Android 6.0

    Так, я не все прочитал. Но добавлю пару слов на счет сворачивания и убивания приложения. Если вы нажимаете кнопку Back, то платформа FMX подаст запрос на уничтожение приложение. Если вы нажимаете на кнопку Home, то приложение просто сворачивается без уничтожения. Первый и второй пункты - это поведение андроид приложений по умолчанию. Если вы не хотите, чтобы приложение принудительно грохалось по кнопки Back. То вам нужно перехватить нажатие этой кнопки и самостоятельно свернуть ваше приложение. Повесить обработчик TForm.OnKeyDown/OnKeyUp и в нем вызвать код по сворачиванию. И сбросить Key и KeyChar TAndroidHelper.Activity.moveTaskToBack(true); А дальше все как обычно. Даже после сворачивания, система может уничтожить ваше приложение в любой момент времени по своему усмотрению.
    6 баллов
  2. Доброго времени суток! Навеяно этой темой. Посмотрел реализацию от @Pax Beach (за что ему спасибо большое) и столкнулся с тем что TRESTClient со всеми потрахами это просто дикий ужас. Решил собрать аналогичный пример, только не использовать TREST*** немного опишу, свою реализацию uAppSettings.pas - хранит описание вашего приложения созданного в ВК FMX.RESTLight.pas - модуль "общения" клиента с сервером FMX.RESTLight.Types.pas - тут хранятся типы для работы TRESTLight Приведу код, который постит Вам на стену текст var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 5); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('friends_only', '0', false); aFields[4] := TmyRestParam.Create('message', 'Тестовое сообщение <RESTLight>', false); TTask.Run( procedure begin aJSON := TRESTLight.Execute('wall.post', FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- wall.post ----'); Memo1.Lines.Add(aJSON); end); end); а вот так можно заливать файлы var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 4); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('photo', aUploadFile, true); // для файлов указывается !!!true!!! TTask.Run( procedure begin // для загрузки файлов использовать TRESTLight.Execute2, в нем можно указать произвольный URL aJSON := TRESTLight.Execute2(aUploadURL, FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- upload file to server ----'); Memo1.Lines.Add(aJSON); end); end); P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется GitHub TRESTLight.zip
    4 балла
  3. Андроед-телефоны, как и все вещи в 2016 году, собираются из каких-то ёбаных микросхем. начало ободряющее))
    4 балла
  4. Andrey Efimov

    WiFi Info

    Название: WiFi Info Платформа: Android 4.1.2 или более поздняя Тип устройства: смартфон, планшет Актуальная версия: 1.1.0 Ссылка: Google Play Описание: Приложение позволяет просматривать полную информацию об активном подключении, сканировать Wi-Fi точки и просматривать информацию о них, а также просматривать информацию о конфигурациях для сохранённых точек доступа. Есть возможность настроить автоматическое обновление информации. Поддержка Android 4.1.2 и выше. Приложение протестировано на устройствах: LG-P705 - Android 4.1.2 Huawei Y541-U02 - Android 4.4.2 Xiaomi Redmi Note 3 - Android 5.0.2 LRX22G (MIUI by xiaomi.eu stable 7.3.1) Samsung SM-T585 Galaxy Tab A 10.1 - Android 7.0
    3 балла
  5. Fedor K

    Работа с намерениями в iOS

    Один из вариантов открытия одного приложения из другого - это использование URL schemes (Ярослав давал выше ссылку). Из приложение А: //отправка uses Macapi.Helpers, FMX.Helpers.iOS; //делаем намерение открыть URL (по сути тоже самое Intent в Android) SharedApplication.openURL(StrToNSUrl(Url)); Приложение Б (подробнее, хотя немного устарело): //подписываемся на события if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(aFMXApplicationEventService)) then aFMXApplicationEventService.SetApplicationEventHandler(HandleAppEvent); //обработчик function HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; var lURL : string; begin case AAppEvent of TApplicationEvent.OpenURL : begin lURL := (AContext as TiOSOpenApplicationContext).URL; //реализуем логику end; Как передать файлы я вижу несколько вариантов: - использовать буфер обмена (класс UIPasteboard - думаю не сложно его использовать в FMX, я им пользовался только в Xamarin, на FMX возможно (нужно проверить) можно использовать FMX.Platform.IFMXClipboardService). Перед открытием URL в "А" - сохраняем картинку/файл в буфер обмена, в "Б" при открытии считываем. - передавать в URL путь к файлу (это возможно только, если и "А" и "Б" являются приложением одной группы). пример с Object-C.
    3 балла
  6. Andrey Efimov

    Проблема в Android 6.0

    Persistent работает только для системных приложений. Попробуйте largeHeap установить в True, тогда памяти под ваше приложение будет выделено больше. И проведите тест с событиями. А вообще, вам уже подсказали Vitaldj и Rusland, любые длительные операции пихаем в сервис.
    3 балла
  7. Vitaldj

    Проблема в Android 6.0

    Коллеги, простите за мою назойливость, но не применяйте свои десктопные знания в мобильных разработках! Это совершенно разные задачи! ИМХО постоянный коннект в мобилах - это зло!
    3 балла
  8. Rusland

    Проблема в Android 6.0

    Да, есть сервисы. Стоит изучить темы тут Android сервисы никак не портировать на iOS
    2 балла
  9. Rusland

    Проблема в Android 6.0

    Это не поможет
    2 балла
  10. Доброго времени сутки недавно для себя открыл что можно из микрофона получить данные потоками: Uses ..., Androidapi.JNI.Media; procedure TForm1.Button1Click(Sender: TObject); var bufferSize: integer; buffer: TJavaArray<Byte>; M: TMemoryStream; begin audioRecord := TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.MIC, 44100, TJAudioFormat.JavaClass.CHANNEL_IN_MONO, TJAudioFormat.JavaClass.ENCODING_PCM_16BIT, 44100 * 2); (audioRecord as JAudioRecord).startRecording; buffer := TJavaArray<Byte>.Create(8820); (audioRecord as JAudioRecord).read(buffer, 0, 8820); (audioRecord as JAudioRecord).stop; audioRecord.release; buffer заполняется данными я проверил все работает (можно код прописать чтобы этот buffer проигрывал) audioRecord := TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.MIC, 44100, TJAudioFormat.JavaClass.CHANNEL_IN_MONO, TJAudioFormat.JavaClass.ENCODING_PCM_16BIT, 44100 * 2); <--- как мне кажется здесь видно что это формат Wave я пытаюсь передать это все серверу: IdUDPClient1.SendBuffer(IdUDPClient1.Host, IdUDPClient1.Port, RawToBytes(buffer, buffer.Length)); сервер запущен на Windows но не получается я слышу только пикание Вопрос: как мне передать этот поток серверу (среды Windows) и как его проигрывать на сервере, может у кого есть опыт работы с этом сфере или какой нибудь документация имеется или какой нибудь предложение есть как все это сделать все совете и предложении очень важен Заранее спасибо согласитесь интересно использовать микрофон так и не дожидая пока он создаст файл всем удачи
    1 балл
  11. Pax Beach

    Проблема в Android 6.0

    В смысле — нельзя — 152-ФЗ? Вы уже обрабатываете персональные данные, значит должны были получить на это разрешение разрешение. В оперативной памяти хранятся данные, чем это от недр отличается? Можно передавать данные через LocalBroadcastReceiver, если объем не большой.
    1 балл
  12. отвяжите TPopupMenu от TListBox procedure TForm4.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); var aItem: TListBoxItem; begin if Button = TMouseButton.mbRight then begin aItem := ListBox1.ItemByPoint(X, Y); if aItem = nil then exit; ListBox1.ItemIndex := aItem.Index; PopupMenu1.Popup(Screen.MousePos.X, Screen.MousePos.Y); end; end;
    1 балл
  13. По идеи можно. Просто используйте нативное апи. TfgApplicationEvent здесь не поможет. Нужно перехватить сообщение с урлом TApplicationEventMessage
    1 балл
  14. Эта официальная статья вам, однозначно, поможет: Inter-App Communication
    1 балл
  15. На ios штатного диалога нету, кроме выбора фотки и видео. Это противоречит концепции apple. Там наоборот не хотят юзеру навязывать папочную структуру. НО, не смотря на это, функции по чтении директорий системы доступны. И вы в принципе, как минимум, можете её прочитать и самостоятельно ее визуализировать в UI.
    1 балл
  16. Rusland

    Проблема в Android 6.0

    На текущий момент и сервис не работает так как ожидается - после смерти от системы, приложение зависает при старте.
    1 балл
  17. Rusland

    Проблема в Android 6.0

    Если хотите увидеть как на аппарате с 2Гб приложение будет выключено системой, то активнее полазайте по сайтам в браузере - например, откройте картинки в Google... через какое-то время приложение "помрет" PS. Еще можете установить какую-нибудь прожорливую игрушку и поиграть в нее
    1 балл
  18. Panel1.Touch.GestureManager := GestureManager1; Panel1.Touch.StandardGestures := [TStandardGesture.sgLeft, ..]; Panel1.Touch.InteractiveGestures := [TInteractiveGesture.Pan, ..];
    1 балл
  19. Нет времени для этого раньше понедельника. Как сделаю, выложу, конечно в соседней теме.
    1 балл
  20. установите из маркета AppStatusWatcher, оно показывает потребление памяти приложением.
    1 балл
  21. из коробки такой возможности нет в примерах был пример для создания кастомного отображения
    1 балл
  22. 1. Можно поставить и самую последнюю версию АПИ (на данный момент последняя версия АПИ 24 Android 7, но использовать рискованно, т.к. Студией официально заявлена поддержка только до версии АПИ 23) Google поддерживает обратную совместимость. 2. Частично, выбор зависит от версии АПИ, пример: в "Build Tools, Revision 23.0.0" появилась официальная поддержка Android 6.0 (API level 23). Т.е. если используете АПИ 23, то Build Tools должны быть версии 23.0.0 или более поздней. Опять же поддерживается обратная совместимость. Подобную информацию можно посмотреть тут SDK Build Tools Release Notes Те же правила относятся и к SDK Tools. По умолчанию студия ставит версию 24.3.3 (19 АПИ) 3. Версия только устанавливаемая вместе со студией! Буквально вчера удалось это на себе прочувствовать. По умолчанию ставится версия NDK r9c. Не обновляйте самостоятельно на последнюю версию, приложения перестанут запускаться на устройствах! 4. Для внутренней работы студии с НДК? не знаю точного ответа... 5. Изменить можно в файле AndroidManifest.template.xml 6. Всё это техническая информация, которая позволяет гуглу выдавать списки приложений под устройство пользователя. Т.е. если у пользователя АПИ 19 устройство, а ваше приложение работает с версиями не ниже 20 АПИ, то этому пользователю не будут показывать ваше приложение. Пример приложения написанного с такими настройками: SDK 23 АПИ NDK r9c в приложении я мониторю версию АПИ, чтобы не пытаться выдать новый функционал из 23 АПИ для версии (например) 19 АПИ. разработка проводилась на устройстве с АПИ 19 Тесты прошли на всех версиях АПИ выше 4.4 Приложение: Wifi Info (Установки: активные/всего - 119/337) Надеюсь хоть немного смог объяснить, хотя сам ещё не до конца понимаю, что хорошо для студии, что плохо... p.s. Всё описанное выше, справедливо для RAD Studio Berlin
    1 балл
  23. AngryOwl

    Локализация приложений

    Друзья! Я тут в одной теме выложил юнит для локализации приложений и демо-пример к нему, а также приложение облегчающее создание и редактирование ресурсов для локализации (файлов с переводами на разные языки). Потом подумал - может стоит вынести это в отдельную тему? Данная проблема (локализации приложений) возникла уже давно. На заре XE2. Потом были все версии, вплоть до текущей. Но лично меня текущие решения так и не устраивали. Мне нужно было простое и удобное редактирование сразу всех языков приложения, и чтобы быстро работало. Тогда и были созданы этот юнит и приложения, с которыми я решил с вами поделиться. Создано это было для себя, для упрощения локализации собственных приложений. Поэтому никакой "красоты" кода прошу не искать - ее там нет. Местами вообще кому-то покажется "кривым"... ) Очень жаль, что у меня критически мало времени для общения на данном ресурсе, а потому я в некотором смысле извиняюсь - мог бы выложить этот код давно. Тем-более, что он очень простой. Все что в нем используется, и как используется, думаю, всем будет доступно и понятно. Итак. Приложение Test_Translator - это дело пример с, непосредственно, самим юнитом uTranslatorFM.pas В uTranslatorFM.pas вы увидите, что локализация осуществлена за счет использования INI-файлов, а сам "перевод" осуществляется простым перебором компонент на форме. Стоит отметить, что перевод осуществляется использованием свойства компонент HelpContext (integer), а у компонент, что не имеют этого свойства - используется свойство Tag. На первый взгляд может показаться неудобным. А если приложение большое - что-то может забыться. Однако, лично я очень быстро привык к такому использованию. И поверьте - приложение, в котором я использую этот юнит, очень большое! ))) Кроме того, если есть компоненты, которые не имеют этих свойств, или которые могут менять значение перевода самостоятельно, либо могут быть динамическими - можно использовать нулевой HelpContext, но при этом придавать им значения "вручную". Например: если требуется у компонента TLabel динамически менять значение в ходе выполнения программы, подставляя нужные "подстроки" (грубо - используя, например, Format(...)), то можно написать в программе Label1.Text := Format( AppTranslator.GetValue(_код_, _значение_по_умолчанию_), [_подставляемое_значение_]); где _код_ - это значение, которое будет считываться из INI-файла (например 100) _значение_по_умолчанию_ - значение строки по умолчанию, на тот случай, если данный текст отсутствует в INI-файле, или файла с таким переводом не существует (этот параметр не обязателен) _подставляемое_значение_ - в данном случае это просто пример, допустим - ход выполнения процесса (например 85%) А строка в INI-файле может быть такая: (файл lang.ru) 100=Процесс выполнения %d%% (файл lang.en) 100=The progress %d%% и также другие языки. Думаю тут, в примере, все элементарно и понятно. Все работает на любой платформе! Как вы будете подключать файлы к приложению - ваше дело. Можно скачивать с инета, можно встроить в качестве ресурсов, задеплоить в проект и т.д. Лично я встраиваю в качестве ресурсов (Win) и деплою (Mac и Android). У меня свои причины и аргументы. Файлы: Lang.ru Lang.en и другие, это INI-файлы соответствующих переводов где строки с переводами имеют одинаковые индексы LangList.ini - вспомогательный файл (разберетесь)) language.rc - файл для создания ресурса (Win) С приложением SLLanguage все немного и сложнее и проще, одновременно... Не вижу смысла его описывать - оно просто позволяет редактировать описанные выше ресурсы (файлы языков). Часть его кода откуда-то позаимствовано (не помню уже). Для чего все это я отдельно решил написать, в отдельную тему? Предлагаю всем пользоваться данным кодом - кому как заблагорассудится! Исправлять, дополнять и делится мыслями и идеями. Возможно кто-то решит создать компонент. Ну вот вроде все, друзья! Если что - спрашивайте! Отвечу по мере возможности. P.S. К модераторам - поправьте, если что, - вдруг не в ту тему закинул. SLLanguage.zip Test_Translator.zip P.P.S. Забыл уточнить - дело-пример делал под XE10, а приложение для создания ресурсов под XE7. Не сложно поправить - кому под что нужно.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...