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

Martifan

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

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

  • Посещение

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

    16

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

  1. Я разобрался как получить FDeviceToken но когда пытаюсь отправить к себе уведомление получаю ошибку

    {
        "multicast_id": 6043277869161850913,
        "success": 0,
        "failure": 1,
        "canonical_ids": 0,
        "results": [
            {
                "error": "InvalidParameters: Failed to decode APNS token: s_{length=32,bytes=0x9658a3f4b737f876f823a1705c1a39a6...dc13415e0a1af7e3}"
            }
        ]
    }

    может кто то знает в чем проблема? и как исправить? заранее спасибо

  2. здравствуйте, я пытаюсь сделать push уведомление на iOS делаю следующим образом:

    unit Unit1;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      System.PushNotification, FMX.Controls.Presentation, FMX.StdCtrls,
      FMX.PushNotification.iOS, FMX.ScrollBox, FMX.Memo;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        FDeviceID: string;
        FDeviceToken: string;
    
        FPushService: TPushService;
        FPushServiceConnection: TPushServiceConnection;
        procedure OnReceiveNotificationEvent(Sender: TObject;
           const ANotification: TPushServiceNotification);
        procedure OnServiceConnectionChange(Sender: TObject;
           AChange: TPushService.TChanges);
    
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      FPushService := Nil;
      FPushServiceConnection := Nil;
      FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.APS);
      if Assigned(FPushService) then
        begin
          FPushServiceConnection := TPushServiceConnection.Create(FPushService);
          FPushServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent;
          FPushServiceConnection.OnChange := OnServiceConnectionChange;
          FPushServiceConnection.Active := True;
        end else
        Begin
          ShowMessage('False');
        End;
    end;
    
    procedure TForm1.OnReceiveNotificationEvent(Sender: TObject;
      const ANotification: TPushServiceNotification);
    begin
    //  ShowMessage('OnReceiveNotificationEvent');
    end;
    
    procedure TForm1.OnServiceConnectionChange(Sender: TObject;
      AChange: TPushService.TChanges);
    begin
      Memo1.Lines.Clear;
      if (TPushService.TChange.DeviceToken in AChange) and
           Assigned(FPushServiceConnection) then
         begin
           FDeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID];
           FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];
           // save token and ID to  remote db here
           Memo1.Lines.Add('DeviceID: '+FDeviceID);
           Memo1.Lines.Add('DeviceToken: '+FDeviceToken);
         end;
    end;
    
    end.

    все проходит нормально но получаю значение FDeviceID а значение FDeviceToken пустой все сертификаты установлены правильно и соответственно указана все правильно как я говорил перемен FDeviceID получает значение а

    FDeviceToken возвращается пустым на форумах тоже видел такую проблему но может кто то решал эту проблему?

    поделитесь пожалуйста
    заранее спасибо 

  3. Здравствуйте, столкнулся с такой проблемой. Пишу небольшой проигрыватель на android и ios, на дроиде работает все нормально, а вот с яблоком проблема: не загружает библиотеку libbass.a
    Добавил ее в Deployment, сохраняется по пути StartUp/Library/ . Файл записывается на устройство, но библиотека все равно не грузится. Код загрузки библиотеки:

    const
      bassdll = 'libbass.a';
    
    function BASS_FOLDER: String;
    begin
    {$IFDEF MSWINDOWS}
      Result := '';
    {$ELSE}
      Result := IncludeTrailingPathDelimiter(system.IOUtils.TPath.GetLibraryPath);
    {$ENDIF}
    end;
     
    procedure LoadBassDLL;
    var
      DocDir: string;
    begin
      docDir:=BASS_FOLDER + bassdll;
    if fileExists(docDir) then    begin
      FBassDLL := LoadLibrary(PChar(docDir));
      if FBassDLL = 0 then
        Exit;
    end;
    end;

    Файл существует, но LoadLibrary возвращает значение 0. Уже всю голову сломал. В чем причина?

  4. В 05.04.2020 в 04:30, Edward Tarasov сказал:

    Сам недавно бился с этим вопросом. ответ нашел на этом форуме.

    Но после долгого гугления вопроса сложилось впечатление, что на сегодняшний день из ios можно выжать максимум три минуты работы приложения в фоне, потом приложение перестает реагировать. в моем случае было необходимо передавать координаты. Что только не перепробовал - три минуты и все. можно мухлевать: Воспроизводить аудио или записывать с микрофона - но ребята из apple при публикации к такому отнесутся не очень. вот исходники которые нарыл - пример отрабатывает в фоне три минуты

     

    BackgroundTaskManager.zip 8 \u043a\u0411 · 0 загрузок

    Спасибо, а если каждый 2 минуты аппликация будет вызывать какой нибудь метод из моего веб сервиса?

  5. Доброго времени суток. Подскажите пожалуйста, как заставить работать TThread в приложении, если приложение свернуто, т.е находится в фоновом режиме. Я делаю так: 

    var I: Integer;
    begin
      I := 0;
      TThread.CreateAnonymousThread(procedure ()
      var Return: String;
      begin
        repeat
        Label1.Text := I.ToString;
        I := I + 1;
        Sleep(1000);
    //    Application.ProcessMessages;
        until I > 10;
      TThread.Synchronize (TThread.CurrentThread,
        procedure ()
        begin
    
        end);
      end).Start;
    end;

    Когда активно приложение, все работает хорошо, после того как сворачиваю, т.е. нажимаю кнопку Home, аппликация сворачивается и процесс останавливается. Когда обратно разворачиваю, процесс продолжается. Как заставить работать приложение в фоновом режиме? Заранее спасибо.

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

    Пытаюсь получить уведомлены делаю все как в примерах и все работает хорошо уведомления приходят но есть одно проблема:

    если у меня экран телефона выключен то когда приходит уведомление только звучит а экран не загорается хотя я когда создаю канал указываю:

    Channel.Importance :=  TImportance.High;
    Channel.LockscreenVisibility := TLockscreenVisibility.&Public;

    но все равно экран не включается кто в курсе как можно сделать так чтобы экран включился? ну как это делает вайбер

    заранее всем спасибо

  7. Всем доброго времени сутки

    решил в приложение реализовать распознавание речи благодаря к примеру Ярослава все работает так как надо:

    unit main;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      FMX.Controls.Presentation, FMX.StdCtrls, FMX.ScrollBox, FMX.Memo;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    uses
      Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Speech, Androidapi.Helpers, FMX.Helpers.Android;
    
    procedure OpenSpeechRecognizer;
    var
      Intent: JIntent;
    begin
      Intent := TJIntent.JavaClass.init(TJRecognizerIntent.JavaClass.ACTION_RECOGNIZE_SPEECH);
      Intent.putExtra(TJRecognizerIntent.JavaClass.EXTRA_PROMPT, StringToJString('Говорите'));
      Intent.putExtra(TJRecognizerIntent.JavaClass.EXTRA_LANGUAGE_MODEL, TJRecognizerIntent.JavaClass.LANGUAGE_MODEL_WEB_SEARCH);
      Intent.putExtra(TJRecognizerIntent.JavaClass.EXTRA_MAX_RESULTS, 1);
      Intent.putExtra(TJRecognizerIntent.JavaClass.EXTRA_LANGUAGE, StringToJString('ru-RU'));
      SharedActivity.startActivityForResult(Intent, 1);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      OpenSpeechRecognizer;
    end;
    
    end.

    Androidapi.JNI.Speech.pas

    {*********************************************************************
     *
     * This Source Code Form is subject to the terms of the Mozilla Public
     * License, v. 2.0. If a copy of the MPL was not distributed with this
     * file, You can obtain one at http://mozilla.org/MPL/2.0/.
     *
     * Autor: Brovin Y.D.
     * E-mail: y.brovin@gmail.com
     *
     ********************************************************************}
    unit Androidapi.JNI.Speech;
    
    interface
    
    uses
      Androidapi.JNIBridge, Androidapi.JNI.JavaTypes;
    
    type
      JRecognizerIntentClass = interface(JObjectClass)
      ['{8AB8D43F-178D-4C79-9FC9-6DDA3D52CEBF}']
        {Property Methods}
        function _GetACTION_RECOGNIZE_SPEECH: JString;
        function _GetEXTRA_PROMPT: JString;
        function _GetEXTRA_LANGUAGE_MODEL: JString;
        function _GetEXTRA_MAX_RESULTS: JString;
        function _GetEXTRA_LANGUAGE: JString;
        function _GetLANGUAGE_MODEL_WEB_SEARCH: JString;
        {Properties}
        property ACTION_RECOGNIZE_SPEECH: JString read _GetACTION_RECOGNIZE_SPEECH;
        property EXTRA_PROMPT: JString read _GetEXTRA_PROMPT;
        property EXTRA_LANGUAGE_MODEL: JString read _GetEXTRA_LANGUAGE_MODEL;
        property EXTRA_MAX_RESULTS: JString read _GetEXTRA_MAX_RESULTS;
        property EXTRA_LANGUAGE: JString read _GetEXTRA_LANGUAGE;
        property LANGUAGE_MODEL_WEB_SEARCH: JString read _GetLANGUAGE_MODEL_WEB_SEARCH;
      end;
    
      [JavaSignature('android/speech/RecognizerIntent')]
      JRecognizerIntent = interface(JObject)
      ['{5AE872F8-D057-4966-97B9-F8DD239C3656}']
      end;
      TJRecognizerIntent = class(TJavaGenericImport<JRecognizerIntentClass, JRecognizerIntent>) end;
    
    implementation
    
    initialization
      TRegTypes.RegisterType('Androidapi.JNI.GraphicsContentViewText.JDataSetObserver', TypeInfo(Androidapi.JNI.Speech.JRecognizerIntent));
    end.

    вот при нажатии кнопки появляется окно который слушает ваш речь и распознаёт:

    image.thumb.png.27f86085bf7853082d1f83fe9d2202bc.png

    вроде все работает но есть маленькая проблема это форма очень быстро перестают слушать то есть приходит пассивном режиме:

    image.thumb.png.ce9a18fb51bfe4118f6337210cfcbc14.png

    то есть если в время разговора остановишься несколько секунд (2-3) то он пассивным становится

    но если использовать распознавание речи клавиатуры:

    image.thumb.png.536e446e355b82d8d8c6c35bfd0ef510.png

    то появляется форма на клавиатуре и очень долго держит паузу:

    image.thumb.png.401ec9d2ad45b27db15e1cda6b1ffa19.png

    а теперь вопрос: 
    1) как мне заставить так же долго держать паузу на первом варианте 
    2) какая отличия между этими 2 формами?
    3) если можно первый вариант сделать на iOS?  

    всем за ранее спасибо :)

  8. 32 минуты назад, #WAMACO сказал:

    Зачем Вам такое поведение приложения? Можно пример?

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

    То есть команда:

    IOHandler.WriteLn(ObjectToJson(ASentObject), IndyTextEncoding_UTF8);

    работал фоновом режиме (когда экран отключен) 

  9. 16 минут назад, Tumaso сказал:

    Чтобы приложение оставалось активным в фоновом режиме (я про андроид), приложение должно отображать постоянное уведомление.

    Сам такое уведомление еще не реализовывал, поэтому технической реализации не подскажу (пока по крайней мере)

    а документацию как это реализовать не знайте где можно прочитать?

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

    сделал стандартный TCP клиент сервер для мобильного устройства то есть сервер запущен на компьютере а клиент мобильнике и клиент через определенное время отправляет одну команду (каждый 30 секунд), все работает идеально, до тех пор пока не погаснет экран на мобильнике после этого перестает отправлять команды и через 5-7 минут вообще отключается клиент от сервера подскажите пожалуйста что можно сделать чтобы он все равно отправлял команды когда экран отключен и не отключался от сервера?

    заранее всем спасибо

  11. 5 часов назад, Евгений Корепов сказал:

    Нашел еще более изящный способ, без исчезновения/показа клавиатуры:

    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.SelectAll;
      Memo1.DeleteSelection;
    end;

     

    Спасибо большое добрый человек действительно работает :)

  12. 24 минуты назад, Евгений Корепов сказал:

    Сделал тестовое приложение (чистый андроид 9, Rio), но не удалось воспроизвести такое поведение.

    Закиньте проект в котором глюк воспроизводится.

    на кнопке параметре стоит CanFocus = False

    Project.rar

  13. 52 минуты назад, Евгений Корепов сказал:

    Не очень понятно где именно вы видите 123456, в самом контроле или в помощнике клавиатуры? 

    в контроле то есть когда удаляю 123 с помощью кнопки, контролер очищается, но когда хочу написать 456 автоматом впереди добавляется 123 и получается 123456

  14. Здравствуйте

    У меня есть один TMemo в форме. Некоторый текст написан пользователем в нем. Есть кнопка стереть. Когда эта кнопка нажата, введенные данные обрабатываются и текст очищается с использованием следующего кода:

    EditBox.Lines.Clear;
    EditBox.Text: = EmptyStr;

    Когда приложение работает на устройстве, оно заметно удаляет текст после нажатия этой кнопки стереть. Однако, когда вы начинаете печатать снова, вы печатаете поверх старого текста. 

    Например: 
    1- Исходный текст набран "123". 
    2- Нажата кнопка стереть. 
    3- Наблюдается, что редактирование содержимого визуально очищается. Текст не отображается. 
    4- Если вы наберете «456» в этом пустом редактировании, и после завершения ввода вы получите «123456» в самом редактировании. 

    Точно так же, когда есть проблема с обработкой, приложение выбирает введенный текст. Если вы начнете печатать, новый текст добавляется, а не заменяется.

    как можно очистить память клавиатуры после удаление текста?

    заранее всем спасибо!

  15. Всем доброго времени сутки 

    Подскажите пожалуйста как поделиться несколько фотографиями, как поделиться 1 фотографией понятно но как сделать несколько отправок за 1 раз? то есть я выделил 3 фотки и хочу поделиться вайбере или вацапе

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