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

Евгений Деревянкин

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

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

  • Посещение

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

    1

Сообщения, опубликованные Евгений Деревянкин

  1. Добрый день! подскажите возможно ли сделать очередь уведомлений firebase?

    Порядок действий:

        1. отключаем интернет

        2. отсылаем 3 разных уведомления с разным текстом

        3. включаем интернет.

    Приходит только последние отправленное уведомление. Пробовал выставить приоритет "priority""high", так же пробовал выставить время жизни уведомления. Не помогает. либо я не правильно делаю.

    https://fcm.googleapis.com/fcm/send

    {
      "to""DeviceToken",
      "notification": {
          "title""test",
          "body""test"
      }
    }

     

     

  2. В 11.10.2021 в 21:15, Евгений Деревянкин сказал:

    Доброго времени суток! 

    Решился перейти на Delphi 11 Alexandria, и увидел одну особенность, в директории Delphi нет файла classes.dex, также его теперь нет в Deployment а еще после компиляции появилась директория Android\Debug\Project1.classes\ , и вот теперь не понимаю как собрать мне новый файл classes.dex для моего проекта. 

    все нормально, classes.dex собрал, файл классов использовал из папки Android\Debug\Project1.classes\, пока полет нормальный

    https://docwiki.embarcadero.com/RADStudio/Sydney/en/Creating_and_Deploying_a_classes.dex_File_Manually

    извиняюсь в deployment файл классов также подключен как и раньше, отображение прозрачное какое то и я его не заметил

  3. Доброго времени суток! 

    Решился перейти на Delphi 11 Alexandria, и увидел одну особенность, в директории Delphi нет файла classes.dex, также его теперь нет в Deployment а еще после компиляции появилась директория Android\Debug\Project1.classes\ , и вот теперь не понимаю как собрать мне новый файл classes.dex для моего проекта. 

  4. Добрый день! помогите с решением, нужен модуль с формой который будет работать на FMX и VCL. Был сделан выбор на использование библиотек DLL. В библиотеке находится TForm и TDataModule. На форме отображается данные из выполненного запроса, добавление, редактирование, удаление записей. Во время вызова формы в DLL передаем строку подключения и подключаемся к БД. на Windows все прекрасно работает, библиотека вызывается на FMX и VCL, из dll отображается форма и загружает данные из БД, все работает. Но есть проблема когда я собираю эту же библиотеку на Android во время создания формы или фрейма вылетает AV.  Даже просто вызываю из DLL функцию Showmessage на Android получаю AV. Пробовал передать в библиотеку TAndroidHelper.Context и вызвать из нее TJToast и все равно AV. Обычные функции с возвращение какого либо значения прекрасно работают, а как доходит дело работы с интерфейсом тут же получаю AV. 

    Подскажите есть ли возможность заставить все это работать на Android. Было бы прекрасно использовать одну библиотеку в разных проектах. Заранее Спасибо!

     

    library Lib;
    
    uses
      System.SysUtils,
      System.Classes,
      Fmx.Types,
      FMX.Dialogs,
      Un_dm in 'lib\Un_dm.pas' {dm: TDataModule},
      Un_FormFMX in 'lib\Un_FormFMX.pas' {FormFMX},
      Un_FrameFMX in 'lib\Un_FrameFMX.pas' {FrameFMX: TFrame};
    
    {$R *.res}
    
    const
      DLL_PROCESS_ATTACH = 1;
      DLL_PROCESS_DETACH = 0;
    
    procedure DLLMain(dwReason: integer);
    begin
      case dwReason of
      DLL_PROCESS_ATTACH:
        begin
          Dm:=TDm.Create(nil);
        end;
    
      DLL_PROCESS_DETACH:
        begin
          FreeAndNil(dm);
          if assigned(FormFMX) then
             FreeAndNil(FormFMX);
        end;
      end;
    end;
    
    
    procedure CreateFormFMX(connect:string);
    begin
      dm.UniConnection1.ConnectString:=connect;
      FormFMX:=TFormFMX.Create(nil);
      FormFMX.Show;
    end;
    
    procedure CreateFrameFMX(AOwner:TComponent;Parent:TFMXObject;connect:string);
    begin
      FrameFmx:=TFrameFMX.Create(AOwner);
      FrameFmx.Parent:=Parent;
    end;
    
    
    exports CreateFormFMX, CreateFrameFMX;
    
    begin
      DLLProc := @DLLMain;
      DLLMain(DLL_PROCESS_ATTACH);
    end.

    Вызов библиотеки:

    unit Un_MainFmx;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
      FMX.Controls.Presentation, FMX.Edit, FMX.Layouts;
    
    type
      TMain = class(TForm)
        Layout1: TLayout;
        Edit1: TEdit;
        Label1: TLabel;
        Button1: TButton;
        Button2: TButton;
        Panel1: TPanel;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Main: TMain;
    
    implementation
    
    {$R *.fmx}
    
    uses
    {$IF DEFINED(win32) or DEFINED(win64)}
        WinApi.Windows,
    {$ENDIF}
        System.IOUtils;
    
    var
      LibHandle: THandle;
      CreateFormFMX: procedure(connect:string);
      CreateFrameFMX: procedure(AOwner:TComponent;Parent:TFMXObject;connect:string);
    
    
    Function LoadLib(Name:string):THandle;
    var dll:THandle;
        Path: string;
    begin
    {$IF DEFINED(win32) or DEFINED(win64)}
      result:= LoadLibrary(PChar(Name+'.dll'));
    {$ENDIF}
    {$IF DEFINED(iOS) or DEFINED(ANDROID)}
      Path := IncludeTrailingPathDelimiter(TPath.GetLibraryPath);
      result := LoadLibrary(PChar(Path + 'lib' + name + '.so'));
    {$ENDIF}
    end;
    
    procedure TMain.FormCreate(Sender: TObject);
    begin
      LibHandle := LoadLib('Lib');
    end;
    
    procedure TMain.FormDestroy(Sender: TObject);
    begin
     FreeLibrary(LibHandle);
    end;
    
    procedure TMain.Button1Click(Sender: TObject);
    begin
     @CreateFormFMX := nil;
    
     if LibHandle >= 32 then
     begin
        @CreateFormFMX := GetProcAddress(LibHandle,'CreateFormFMX');
        if @CreateFormFMX <> nil then
           begin
            CreateFormFMX(Edit1.Text);
           end;
     end;
    end;
    
    procedure TMain.Button2Click(Sender: TObject);
    begin
     @CreateFrameFMX := nil;
    
     if LibHandle >= 32 then
     begin
        @CreateFrameFMX := GetProcAddress(LibHandle,'CreateFrameFMX');
        if @CreateFrameFMX <> nil then
           begin
            CreateFrameFMX(panel1,panel1,Edit1.Text);
           end;
     end;
    end;
    
    
    end.

     

    Debug.rar

    Project.rar

  5. Добрый день! Помогите с решением проблемы... имеется терминал оплаты на android, когда отправлю функцию принять оплату картой запускается системное приложение терминала для считывания карты оплаты, производим оплату, системное приложение закрывается и отправляет статус об оплате, но в момент когда оплата проходит мое приложение остается на фоне и андроид его закрывает.

    Подскажите как мне сделать что бы мое приложение оставалось в памяти и не закрывалось чтобы после оплаты я вернулся к своему приложению обработал ответ от приложения и продолжил работу. флаг persistent не помог.

    терминал слабенький и возможно из-за нехватки ресурсов android закрывает фоновое приложение

×
×
  • Создать...