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

Pax Beach

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

    414
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

Активность репутации

  1. Like
    Pax Beach отреагировална Kitty в Вызов приложения из нофитикейшена   
    Так давайте я проверю работу готового сервиса. У меня есть реальный маячок.
    Мне трудно самой придумать архитектуру. Например, так реализовано у сети кофейн Starbucks.
    Пользователь приходит, телефон его приветствует, считает частоту его приходов и т.п. делает выводы и предлагает разного рода плюшки.
     
    Это наблюдала несколько месяцев назад в гостях на одной из выставок тут: http://художественныесокровища.рф/
    Была выставка с этой технологией. Народ ходил от картины к картине и слушал инфо из телефона. Были мною замечены маячки...
  2. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в StatusBar Color   
    нам из делфи доступно сделать только полупрозрачный цвет
    никак, не используйте светлые цвета для окраски
    Пока лучшего результата не смог достичь
  3. Like
    Pax Beach отреагировална Kitty в Вызов приложения из нофитикейшена   
    Изучила пример: C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\AndroidBeaconServiceDemo.
    Там есть readme.html и там написано:
     
    Ну просто красота - в готовое приложение можно добавить сервис: Right-click on the Android device, and select Add Android Service.
    Размечталась я об кренделях небесных - ну думаю в мой проект на С++ можно добавить службу на Дельфи и наступит счастье.
    Делаю в своем проекте Right-click on the Android device, and select Add Android Service и... ничего не происходит, просто тишина.
    Значит чтобы добавить службу на дельфи и само приложение должно быть на дельфи... печалька...
  4. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в StatusBar Color   
    Шаблон для проектов с покраской статус бара для мобильных платформ
       
    UPDATE: StatusBarColor.7z
    UPDATE2: StatusBarColor_update.zip
     
  5. Like
  6. Like
    Pax Beach получил реакцию от Kitty в Вызов приложения из нофитикейшена   
  7. Like
    Pax Beach получил реакцию от Kitty в Вызов приложения из нофитикейшена   
    По порядку:

    1. Сервис поможет работать с датчиками, не запуская приложение, если это нужно делать скрыто без участия пользователя. Даже, если приложение выгружено из памяти, сервис обработает нужные сообщения с датчиков и сети (если нужно PUSH с сервера получить). Ну это все выше обсудили вроде.
    2. Другой вариант, прописать в Manifest BroadCastReceiver, слушать события типа (TJBluetoothDevice.JavaClass.ACTION_FOUND or TJBluetoothAdapter.JavaClass.ACTION_SCAN_MODE_CHANGED, могу ошибаться с BLE не работал). Приложение само будет запускаться (не открываться основная активити, а запускаться в памяти), когда система будет отлавливать эти события и передавать приложению. Вот только не уверен, что система их будет ловить, если датчик BLE ни какое приложение не будоражит, и он уснет. Я бы делал первый пункт и второй вместе.
    3. Программно включать и выключать BlueTooth не есть хороший тон с точки зрения безопасности, если Гугл это еще не закрыли, то наверное закроют через время. Но в целом, это этическая сторона, а как это делается технически, можно посмотреть здесь.
    4. Если у вас есть модуль «Embarcadero\Studio\18.0\source\rtl\net\System.Bluetooth», то в нем есть все, что нужно для работы с BLE. Осталось разобраться, как обрабатывать сообщения на ваших устройствах iOS или Android, как сделать так, чтобы датчики не спали и читали входящие и т.п.
    5. В Tools→Getit PM есть компоненты Beacon Fence (BeaconZonesFencing, BeaconMapFencing). Кто-нибудь их смотрел? Судя по описанию, они решают задачу собственно технологии Beacon Fence. Очень интересно узнать, что в итоге получится у Kitty или кого-то еще из этого коллективного обсуждения.
     
  8. Like
    Pax Beach отреагировална master webs в Вызов приложения из нофитикейшена   
  9. Like
    Pax Beach отреагировална Kitty в Вызов приложения из нофитикейшена   
    Теперь мне понятно, что пуш присылает главный сервер, почитала документацию эмбаркадеро. Однако, как я поняла, это не подходит для компонента TBeacon. Вот приложение не запущено, вот вошёл человек в зону TBeacon, откуда об этом узнает главный сервер, чтобы послать пуш? Следовательно не подходит или не до конца поняла...
    Подумав пришла к выводу, что и отдельный фоновый сервис не возможно использовать с TBeacon. С этим компонентом сервис просто не запуститься. Моя программа, когда я её запускаею, напоминает мне включить блютуз если он не включён. Это действие компонента TBeacon. Следовательно фоновый сервис с компонентом TBeacon и не за пуститься если блютуз выключен.
    Одно не понятно, почему тут он говорит, что пуш приходит на спящий телефон, следовательно приложение не запущено. Как главный сервер может знать, что человек входит в зону?  Может он приверает в своём видео?
     
     
  10. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Как узнать, в какой кодировке файл?   
    Вот такой код когда-то писал
    var Stream: TBytesStream; Size: Integer; Buffer: TBytes; Encoding: TEncoding; begin if OpenDialog1.Execute then begin Stream := TBytesStream.Create; try Stream.LoadFromFile(OpenDialog1.FileName); Buffer := Stream.Bytes; Size := TEncoding.GetBufferEncoding(Buffer, Encoding, TEncoding.Default); finally Freeandnil(Stream); end; if not TEncoding.IsStandardEncoding(Encoding) then Encoding := TEncoding.GetEncoding(Encoding.CodePage); ShowMessage(Encoding.EncodingName); end; проблема в том что в недрах этой строчки
    Size := TEncoding.GetBufferEncoding(Buffer, Encoding, TEncoding.Default); всегда ворачивается Кодировка по умолчанию (Windows - ANSI, Остальные - UTF-8), если кодировка отличается от стандартных (ANSI, ASCII, UTF7, UTF8, Unicode, BigEndianUnicode)
     
    И этот код никогда не выполнится
    if not TEncoding.IsStandardEncoding(Encoding) then Encoding := TEncoding.GetEncoding(Encoding.CodePage); Вариант остается такой, собрать преамбулы всех кодировок и самому проверить их соответсвие
  11. Like
    Pax Beach отреагировална Andrey Efimov в Как указать заголовок Android сервиса (android:label для тега <service>) в AndroidManifest.xml?   
    Попробуйте прописать сервисы в лоб.
    Открываем файл AndroidManifest.template.xml в проекте (не в сервисе)
    находим
    <%services%> заменяем на
    <service android:exported="false" android:name="com.embarcadero.services.MyService" android:label="MyService" /> Полностью пересобираем проект.
     
    p.s. У меня получилось так, лейбел прописался во всех манифестах.
  12. Like
    Pax Beach отреагировална Rusland в Проблема при активации memo или edit программа зависает и закрывается.   
    С выходом новой версии студии Berlin вернулась старая болячка на моем планшете - падение при фокусе Edita. Исправил  FMX.Platform.Android.pas почти также как в прошлый раз и проблема ушла:
    procedure TPlatformAndroid.RunOnUIThread(Proc: TThreadProcedure); begin //MainActivity.runOnUiThread(TSimpleProcedureRunner.Create(Proc)); CallInUIThread( procedure() begin Proc; end); end; procedure TPlatformAndroid.SynchronizeOnUIThread(Proc: TThreadProcedure); //var // Runner: TSimpleProcedureRunner; begin // Runner := TSimpleProcedureRunner.Create(Proc); // MainActivity.runOnUiThread(Runner); // Runner.Event.WaitFor; CallInUIThreadAndWaitFinishing( procedure() begin Proc; end); end;  
  13. Like
    Pax Beach отреагировална Rusland в Акция: Berlin 10.1 C++ Builder Starter БЕСПЛАТНО   
    Ну раз пошла такая пьянка, забавно, но действительно дало купить сибилдер Starter за 0$
    Теперь ждем акции, дельфи Professional за 10$ 
  14. Like
    Pax Beach получил реакцию от Kitty в "Общение" сервиса и приложения через intent   
    Intents — это намерения.
    Intent Filter — это желание обслуживать намерения.
    Принял (приложением) отправленный Intent — будь добр запуститься и обработать это намерение.
     
    Не подходят для этой задачи startActivity, нужно использовать BroadcastReceiver и отправлять ему свой Intent:
    procedure TMainScreen.SomeOneSaysMeWhatIamStupidAndIsentHim; Begin TAndroidHelper.Context.sendBroadcast(Intent); End; procedure TMainScreen.FormActivate(Sender: TObject); begin begin try TAndroidHelper.Context.registerReceiver(FReceiver, FIntentFilter); finally end; end; end; procedure TMainScreen.FormDeactivate(Sender: TObject); begin try TAndroidHelper.Context.unregisterReceiver(FReceiver); finally end; end;  
  15. Like
    Pax Beach получил реакцию от Kitty в google клавиатура   
    А... так это просто решается.
    procedure TfmSettings.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); var FService: IFMXVirtualKeyboardService; begin if (Key = vkHardwareBack) then begin Key := 0; // <=== вот здесь очищается буфер клавиатуры TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService)); if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) then begin FService.HideVirtualKeyboard; exit; end else begin Close; end; end; end;  
  16. Like
    Pax Beach отреагировална Adm123 в "Общение" сервиса и приложения через intent   
    Rusland   Спасибо большое, всё работает на ура. Вот только никак не могу добиться, чтоб сервис присылал сообщения втихую, не открывая приложения... Нет идей на эту тему?
  17. Like
    Pax Beach отреагировална Rusland в Запустить приложение из сервиса или показать форму   
    fsdb, Создаем, например, в сервисе поток, в нем делаем запрос к сайту, получаем html, парсим.
    Ярослав за такой код спасибо не скажет, поэтому адрес замените  
    unit Unit2; interface uses System.SysUtils, System.Classes, System.Android.Service, AndroidApi.JNI.GraphicsContentViewText, Androidapi.JNI.Os; type TMyThread = class(TThread) private function MyFunc():String; function GetTitle(HtmlCode:string):String; protected FURL: string; public constructor Create(const aURL: string); destructor Destroy; override; procedure Execute; override; property URL: string read FURL; end; type TAndroidServiceDM = class(TAndroidService) function AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; private { Private declarations } aMyThread: TMyThread; public { Public declarations } end; var AndroidServiceDM: TAndroidServiceDM; implementation {%CLASSGROUP 'FMX.Controls.TControl'} {$R *.dfm} uses System.Net.HTTPClientComponent, System.Net.HttpClient, Androidapi.JNI.App; function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin aMyThread:=TMyThread.Create('http://fire-monkey.ru/'); Result:=TJService.JavaClass.START_STICKY; end; constructor TMyThread.Create(const aURL: string); begin FURL:=aURL; inherited Create(False); end; destructor TMyThread.Destroy; begin inherited; end; procedure TMyThread.Execute; var aResponser:string; begin try while not terminated do begin Sleep(15000); try aResponser:=MyFunc; finally end; end; except on E:Exception do // end; end; function TMyThread.GetTitle(HtmlCode:string):String; var // парсим Title s:string; begin Result:=Copy(HtmlCode,Pos('<title>',HtmlCode)+7,Pos('</title>',HtmlCode)-Pos('<title>',HtmlCode)-7); end; function TMyThread.MyFunc():String; var aHTTPResponse: IHTTPResponse; aResponser: String; sStream: TStringStream; aHttpClient: TNetHTTPClient; begin aResponser:=''; Result:=aResponser; try aHttpClient := TNetHTTPClient.Create(nil); aHTTPClient.AllowCookies :=true; aHTTPClient.AcceptLanguage:='ru-RU;q=0.8,en-US;q=0.5,en;q=0.3'; aHTTPClient.ContentType :='text/html'; aHTTPClient.AcceptCharset :='utf-8'; aHTTPClient.Accept :='text/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; try sStream := TStringStream.Create(); try aHTTPResponse := aHttpClient.Get(FURL, sStream); // get сервера (/wait) if (aHTTPResponse<>nil) then aResponser:=GetTitle(sStream.DataString); else aResponser:=''; except on E:Exception do // end; finally aHttpClient.Free; sStream.Free; end; finally Result:=aResponser; end; end; end. Приложение один раз запустить в любом случае придется.
    Если приложение закрыть вручную, то запросы перестают идти (почему не знаю). А если приложение "убивает" сам андроид (например если мало оперативной памяти), то запросы идут как и положено
  18. Like
    Pax Beach отреагировална Brovin Yaroslav в Как массово задать размер шрифта у всех контролов?   
    Добрый день,
     
    В RAD Studio XE5 для поддержки возможности массово менять настройки текста для любых контролов был введен специальный интерфейс ITextSettings. Каждый контрол, который поддерживает настройку параметров текста, реализует этот интерфейс. Поэтому, чтобы массово поменять настройки текста можно использовать, например, следующий код (Delphi, он легко переводится на C++). Этот код Для всех наследников, которые не используют размер шрифта из стиля, задает размер шрифта:
    var Settings: ITextSettings; Instance: TComponent; I: Integer; begin for I := 0 to ChildrenCount - 1 do begin Instance := Children[I]; if IInterface(Instance).QueryInterface(ITextSettings, Settings) = S_OK then begin // using ITextSettings methods and properties: // TextSettings: TTextSettings, // DefaultTextSettings, // StyledSettings // to change properties of text objects Settings.TextSettings.BeginUpdate; try Settings.TextSettings.Font.Size := 18; if TStyledSetting.ssSize in Settings.StyledSettings then Settings.StyledSettings := Settings.StyledSettings - [TStyledSetting.ssSize] // show Font.Size := 18 else Settings.StyledSettings := Settings.StyledSettings + [TStyledSetting.ssSize]; // restore showing Font.Size loaded from a style finally Settings.TextSettings.EndUpdate; end; end; end; end;
  19. Like
    Pax Beach получил реакцию от Kitty в google клавиатура   
    Я использую сочетание свойств TEdit:
    *.KillFocusByReturn := false;
    *.ReturnKeyType := TReturnKeyType.Next;
     
    Соответственно на последнем компоненте
    *.KillFocusByReturn := true;
     
    Только не всегда в правильном порядке переход к следующему элементу фокус переходит, но это уже проблема дизайна формы.
     
  20. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Диалоговое окно на Андроид.   
    Конечно, полная свобода. Что понадобится все можно прикрутить
    myInput.Edits[0].ReturnKeyType := TReturnKeyType.Done; myInput.Edits[0].KillFocusByReturn := true; myInput.Edits[1].ReturnKeyType := TReturnKeyType.Done; myInput.Edits[1].KillFocusByReturn := true;  
  21. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Диалоговое окно на Андроид.   
    наверное вы это имели ввиду
    <TMyInputQuery>.Edits[0].KillFocusByReturn := true;  
  22. Like
    Pax Beach отреагировална krapotkin в Диалоговое окно на Андроид.   
    аналогично
    вот копия
    MyDialogs_ZuBy.7z
  23. Like
    Pax Beach отреагировална krapotkin в google клавиатура   
    У edit есть свойство ReturnKeyType
    нужно установить его в Next
    но некоторые клавиатуры косячат и могут игнорить эту установку
    гугл вроде норм. работает
  24. Like
    Pax Beach отреагировална alxsev в Гороскоп на каждый день   
    у меня капает только если пользователи нажмут на рекламу. а нажимают ой как не охотно.
  25. Like
    Pax Beach получил реакцию от rareMax в Serial port   
    Кто-нибудь знал, чтобы сервис автоматически запускался по событию BOOT_COMPLETED, нужно, чтобы сервис был Remote Service?
    В этом случае AndroidManifest.xml будет содержать строку <service android:exported="true" android:name="com.embarcadero.services.BootService" />, а это в свою очередь хорошо отразится на успешном запуске вашего сервиса после перезагрузки устройства.
    Это была хорошая новость.
    Плохая заключается в том, что если сервис уже написан, и вам надо включить его в автозагрузку, придется переписать сервис заново (перенести все написанное из обычного в Remote Service).
    Пора делать отдельный топик. Всем благ!
     
×
×
  • Создать...