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

bossalex

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

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

  • Посещение

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

    1

Сообщения, опубликованные bossalex

  1. Всем привет пытаюсь сделать push с большой картинкой на Delphi FMX 10.3.1 RIO используя материалы этого топика и http://delphifmandroid.blogspot.com/2014/07/java_11.html  

    В итоге подключил свой ImageDownloader.class по закачке картинки с url и заменил модифицированный мною  NotificationPublisher.class  и обновил fmx.jar  создал classes.dex осталось проверить в проекте, отключить дефолтный  classes.dex задеплоить новый .

    Надо бы еще в push добавить кнопку со ссылкой на url сайта  в NotificationPublisher.class я переменную для него добавил, осталось реализовать. Там как через активи это делается или через интент,

    RIO IMAGE PUSH добавил архив с class и fmx.jar

    push.zip

  2. Ниже код работал при правильном манифесте(AndroidManifest.template.xml? его переделал перестал, а исходник не сохранил.

    Если кто гуру в этом деле помогите, в долгу не останусь. Являюсь пожизненным поклонником Delphi от 1 версии до последней, первые приложения писал начиная с 1997г.

    если кого интересуют мои наработки поделюсь https://www.fl.ru/users/bossalex/

    где-то рабочий код брал под fmx 10.3.1 RIO, этот работает только на 10.1.2

    ==========================исходник проекта прикрепил----------->>>

    unit Unit1;

    interface

    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      Androidapi.JNI.Location, Androidapi.JNIBridge, Androidapi.JNI.JavaTypes,
      Androidapi.JNI.Os,Androidapi.Helpers, FMX.Layouts, FMX.ListBox, FMX.StdCtrls,
      FMX.Controls.Presentation,FMX.Platform,System.Rtti;

    type

      TLocationListener = class;

      TForm1 = class(TForm)
        Button1: TButton;
        ListBox1: TListBox;
        CheckBox1: TCheckBox;
        CheckBox2: TCheckBox;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        procedure Button1Click(Sender: TObject);
        { Private declarations }

      private
        FLocationManager : JLocationManager;
        locationListener : TLocationListener;
      public
        destructor Destroy; override;
        { Public declarations }
        procedure onLocationChanged(location: JLocation);
      end;

      TLocationListener = class(TJavaLocal, JLocationListener)
      private
        [weak]
        FParent : TForm1;
      public
        constructor Create(AParent : TForm1);
        procedure onLocationChanged(location: JLocation); cdecl;
        procedure onProviderDisabled(provider: JString); cdecl;
        procedure onProviderEnabled(provider: JString); cdecl;
        procedure onStatusChanged(provider: JString; status: Integer; extras: JBundle); cdecl;
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.fmx}

    uses FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText;

    { TLocationListener }

    constructor TLocationListener.Create(AParent: TForm1);
    begin
      inherited Create;
      FParent := AParent;
    end;

    procedure TLocationListener.onLocationChanged(location: JLocation);
    begin
      FParent.onLocationChanged(location);
    end;

    procedure TLocationListener.onProviderDisabled(provider: JString);
    begin

    end;

    procedure TLocationListener.onProviderEnabled(provider: JString);
    begin

    end;

    procedure TLocationListener.onStatusChanged(provider: JString; status: Integer;
      extras: JBundle);
    begin

    end;

    { TForm1 }

    procedure TForm1.Button1Click(Sender: TObject);
    var
      LocationManagerService: JObject;
      iter : JIterator;
      location : JLocation;
      ClipService: IFMXClipboardService;
    begin
     try
      if not Assigned(FLocationManager) then
      begin
        LocationManagerService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.LOCATION_SERVICE);
        FLocationManager := TJLocationManager.Wrap((LocationManagerService as ILocalObject).GetObjectID);
        if not Assigned(locationListener) then
          locationListener := TLocationListener.Create(self);
        FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.GPS_PROVIDER, 10000, 10, locationListener,
            TJLooper.JavaClass.getMainLooper);
      end;
      iter := FLocationManager.GetAllProviders.Iterator;
      ListBox1.Clear;
      while iter.hasNext do
      begin
        ListBox1.Items.Add(JStringToString(iter.next.ToString));
      end;
      CheckBox1.IsChecked := FLocationManager.isProviderEnabled(TJLocationManager.JavaClass.GPS_PROVIDER);
      CheckBox2.IsChecked := FLocationManager.isProviderEnabled(TJLocationManager.JavaClass.NETWORK_PROVIDER);
      location := FLocationManager.getLastKnownLocation(TJLocationManager.JavaClass.GPS_PROVIDER);
      onLocationChanged(location);
     except
        on e:Exception do
        begin
            if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService,ClipService) then
        Begin
          ClipService.SetClipboard(TValue.From<string>(e.Message));
          ShowMEssage(e.Message);
        end;
        end;
     end;
    end;

    AndroidGPS.zip

  3. пробовал на Delphi 10.1.2 вот это код пашет, но был вариант и под RIO пахал, но сейчас нет посеял AndroidManifest.template.xml файл проекта прикрепил

    unit Unit1;

    interface

    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      Androidapi.JNI.Location, Androidapi.JNIBridge, Androidapi.JNI.JavaTypes,
      Androidapi.JNI.Os,Androidapi.Helpers, FMX.Layouts, FMX.ListBox, FMX.StdCtrls,
      FMX.Controls.Presentation;

    type

      TLocationListener = class;

      TForm1 = class(TForm)
        Button1: TButton;
        ListBox1: TListBox;
        CheckBox1: TCheckBox;
        CheckBox2: TCheckBox;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        procedure Button1Click(Sender: TObject);
        { Private declarations }

      private
        FLocationManager : JLocationManager;
        locationListener : TLocationListener;
      public
        destructor Destroy; override;
        { Public declarations }
        procedure onLocationChanged(location: JLocation);
      end;

      TLocationListener = class(TJavaLocal, JLocationListener)
      private
        [weak]
        FParent : TForm1;
      public
        constructor Create(AParent : TForm1);
        procedure onLocationChanged(location: JLocation); cdecl;
        procedure onProviderDisabled(provider: JString); cdecl;
        procedure onProviderEnabled(provider: JString); cdecl;
        procedure onStatusChanged(provider: JString; status: Integer; extras: JBundle); cdecl;
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.fmx}

    uses FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText;

    { TLocationListener }

    constructor TLocationListener.Create(AParent: TForm1);
    begin
      inherited Create;
      FParent := AParent;
    end;

    procedure TLocationListener.onLocationChanged(location: JLocation);
    begin
      FParent.onLocationChanged(location);
    end;

    procedure TLocationListener.onProviderDisabled(provider: JString);
    begin

    end;

    procedure TLocationListener.onProviderEnabled(provider: JString);
    begin

    end;

    procedure TLocationListener.onStatusChanged(provider: JString; status: Integer;
      extras: JBundle);
    begin

    end;

    { TForm1 }

    procedure TForm1.Button1Click(Sender: TObject);
    var
      LocationManagerService: JObject;
      iter : JIterator;
      location : JLocation;
    begin
     try
      if not Assigned(FLocationManager) then
      begin
        LocationManagerService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.LOCATION_SERVICE);
        FLocationManager := TJLocationManager.Wrap((LocationManagerService as ILocalObject).GetObjectID);
        if not Assigned(locationListener) then
          locationListener := TLocationListener.Create(self);
        FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.GPS_PROVIDER, 10000, 10, locationListener,
            TJLooper.JavaClass.getMainLooper);
      end;
      iter := FLocationManager.GetAllProviders.Iterator;
      ListBox1.Clear;
      while iter.hasNext do
      begin
        ListBox1.Items.Add(JStringToString(iter.next.ToString));
      end;
      CheckBox1.IsChecked := FLocationManager.isProviderEnabled(TJLocationManager.JavaClass.GPS_PROVIDER);
      CheckBox2.IsChecked := FLocationManager.isProviderEnabled(TJLocationManager.JavaClass.NETWORK_PROVIDER);
      location := FLocationManager.getLastKnownLocation(TJLocationManager.JavaClass.GPS_PROVIDER);
      onLocationChanged(location);
     except
        on e:Exception do  showmessage('Ошибка :'+e.Message);
     end;
    end;

    destructor TForm1.Destroy;
    begin
      if Assigned(locationListener) then
        FLocationManager.removeUpdates(locationListener);
      inherited;
    end;

    procedure TForm1.onLocationChanged(location: JLocation);
    begin
      Label4.Text := location.getLatitude.ToString;
      Label5.Text := location.getLongitude.ToString;
      Label6.Text := location.getAltitude.ToString;
    end;

    end.

    AndroidGPS.zip

  4. Id_client

    Id выданный сервисом PUSH нотификации(и что такое центр нотификации компонент NotificationC: TNotificationCenter;
      Notification: TNotification; он получает сообщения от PUCH сервера и выводит количество сообщений на иконке приложения?  )

     

    прочитал статью http://blog.rzaripov.kz/2017/02/firebase-android-ios.html  и 2 ую часть статьи, сделал под андроид

    Id это то что на закладке Cloud Messaging  Идентификатор отправителя  или что то другое

    пытаюсь к приложение подключить PUSH сообщения.

    С PUSH ни разу не сталкивался делаю приложение на Delphi FMX 10.1 android или надо ставить версию 10.3 RIO?

  5. Delphi 10.1 FMX android получаю данные с сервера в rest закодирован base64 хранится pdf, нужно его раскодировать и  сохранить на устройстве - далее отобразить пользователю

    Пример ответа сервера:

    {

      "code": 200,

      "body": {

        "finishFlag": true,

        "instanceId": "c9d0328a-6234-46d9-bc3b-d8adef9a0a71",

        "nextStep": {

          "pdf": "JVBERi0xL....PRg0K", -- pdf в base64 (он большой, для примера обрезал)

          "sort_order": 10,

          "is_not_prepr": false,

          "stepType": "A$FS_PRINT",

          "clientStep": true

        }

      },

    Как отобразит вроде пример есть через intent (я это делал только через THttp скачивал и через установленный с плеймаркет просмотрщиком PDF просматривал  )

    {$IFDEF ANDROID}
    Uses
       Androidapi.JNI.GraphicsContentViewText,
       Androidapi.Helpers,
       Androidapi.JNI.JavaTypes,
       Androidapi.JNI.Net;
    {$ENDIF}

    procedure btnPdfClick(Sender: TObject);
    var
       fName       : String;
    {$IFDEF ANDROID}
       Intent      : JIntent;
       URI         : Jnet_Uri;
    {$ENDIF}
    begin
        fName := TPath.GetSharedDownloadsPath + PathDelim + 'test.pdf';
    
        {$IFDEF ANDROID}
          URI := TJnet_Uri.JavaClass.parse(StringToJString('file:///' + fName));
          intent := TJIntent.Create;
          intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
          intent.setDataAndType(URI,StringToJString('application/pdf'));
          SharedActivity.startActivity(intent);
        {$ENDIF}
    end;

     

  6. Кто знает как яндекс почту прикрутить к indy с ssl под дектоп работает, под андроид раньше работало сейчас оред что в отладке при коннекте SMTP не загружена библиотека SSL ранше использовал связку tidSMTP+tidMessage+IdSSLIOHandlerSocketOpenSSL c 465 портом

    Этото код работает в десктопе на яндексе под win рабоатает со внешними библиотекеми SSL типа libeay32.dll ssleay32dll

    Function TFormOFORMLENIE.mail(email:STRING):Boolean;
    var email:String;
    begin
      try
        Smtp.AuthType:=satDefault;
        SMTP.ReadTimeout:=10000;
        SMTP.Host := 'smtp.yandex.ru';
        SMTP.Port := 465;
        SMTP.Username :=login;
        SMTP.Password :=pass;

        SMTP.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
        SMTP.UseTLS:= utUseImplicitTLS;

        IdSSLIOHandlerSocketOpenSSL1.Destination := SMTP.Host+':'+IntToStr(SMTP.Port);
        IdSSLIOHandlerSocketOpenSSL1.Host := SMTP.Host;
        IdSSLIOHandlerSocketOpenSSL1.Port := SMTP.Port;
        IdSSLIOHandlerSocketOpenSSL1.DefaultPort := 0;
        IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:=sslvTLSv1;
        IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned;
        MailMessage.From.Name := 'Тест';
        MailMessage.Subject := 'Тест: '+FormatDateTime('dd.mm.yy-hh:nn',Now) ;

        MailMessage.From.Address :='bossalex@ya.ru';
        MailMessage.Recipients.EMailAddresses := email;
        MailMessage.Body.Text := MemoTXT.Text;
      try
          try
            SMTP.Connect;// орет нет библиотеки SSL - под win рабоатает со внешними библиотекеми SSL типа libeay32.dll ssleay32dll только не FMX на VCL к яндексу коннектися и отправляет письма,

    // есть еще libgcc_s_dw2-1.dll libwinpthread-1.dll msvcr100.dll правда не помню тоже какието библиотеки забыл для чего, надо в инете поковырять
            sleep(200);
            Application.ProcessMessages;
            SMTP.Send(MailMessage);
            ShowMessage('Письмо отправлено!');
            MailMessage.MessageParts.Clear;
          except
            on e: Exception do
            begin
              sleep(200);
              ShowMessage('Письмо не отправлено!');
            end;
          end;
        finally
          MailMessage.MessageParts.Clear;
          SMTP.Disconnect;
        end;
      except
      end;
    end;

  7. ни parent ни фига не помогает я уже задрался под андроид приложение лепить только под windows  fmx  както работает под android одно безумие

    я так думаю это 10,1 глючить так как по xe 8 таких глюков не было или я чтото упустил под android 6 надо попробовать под 4

    function TFormKorzina.free_(n:String):Boolean;
    begin
     try
      {$IF DEFINED(iOS) or DEFINED(ANDROID)}
      SeekObject:=FindComponent(n);
      if SeekObject<>nil then
      begin
           TControl(SeekObject).DisposeOf;
        TControl(SeekObject):=nil;
      end;
      //freeandnil(TComponent(SeekObject));//.DisposeOf;
      {$ENDIF}
      {$IFDEF MSWINDOWS}
      SeekObject:=FindComponent(n);
      if SeekObject<>nil then
      begin
       TControl(SeekObject).Parent:=nil;
       TControl(SeekObject).Free;
       TControl(SeekObject):=nil;
      end;
      {$ENDIF}
     except

     end;
    end;

  8. в коде под андроид на Delphi FMX не могу решить проблему

    при повторном вызове окна методом Show убиваю компонент RectangleFon.DisposeOf; служащий контейнером других элементов

    затем заново его создаю RectangleFon:=TRectangle.Create(FormKorzina);

    потом при обращении к вновь созданным элементам таким же способом

    получаю ошибку Segmentation fault (11). В другой форме такой метод работает

    а тут ругается   if FormKorzina.SumDostavki>0 then
      FormKorzina.LabelSumStoimost.Text:=floatToStr(FormKorzina.SumDostavki)+' рублей' на выполнении

    Скорее кудато лезу не туда в память а что делать не в курсе пробовал убивать freeandnill(RectangleFon); результат такой же, уже и дебагером проверял ругается то на фонт то на get в компоненте использовал данный метод убийства раньше freeandnill вроде проблем не было

  9. 4 часа назад, bossalex сказал:

    Недавно компилил приложение на Delphi  FMX Android  при обращении  к серверу https при выполнении Get запроса от компонента TIdHttp запросил библиотеку "Could not load SSL library" используется протокол sslvTLSv1_2 в windows все пашет в андроид нет , накопал что можно подключить библиотеки  libssl.so и  libcrypto.so через  deployment .assets\internal , А вот как в коде дальше их использовать никто примерчик не выложил, хоть и обсуждали на интернет просторах 100 раз, те как прикрутить  к IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile. Если есть у кого код выложите пожалуйста? или скинте по email bossalex@ya.ru

    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method.sslvTLSv1_2;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode.sslmUnassigned;

     

     

  10. Недавно компилил приложение на Delphi  FMX Android  при обращении  к серверу https при выполнении Get запроса от компонента TIdHttp запросил библиотеку "Could not load SSL library" используется протокол sslvTLSv1_2 в windows все пашет в андроид нет , накопал что можно подключить библиотеки  libssl.so и  libcrypto.so через  deployment .assets\internal , А вот как в коде дальше их использовать никто примерчик не выложил, хоть и обсуждали на интернет просторах 100 раз, те как прикрутить  к IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile. Если есть у кого код выложите пожалуйста? или скинте по email bossalex@ya.ru

    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method.sslvTLSv1_2;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode.sslmUnassigned;

     

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