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

zairkz

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

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

  • Посещение

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

    12

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

  1.  

    Цитата

     

    ругается:

    [DCC Error] AndoridVoiceComponents.dpk(38): E2200 Package 'rtl' already contains unit 'Androidapi.JNI.Speech'


     

    Компонент надо установить только под 32-bit windows->compile->install

    А для компиляции проекта надо чтобы в папке проекта лежали выше указанные файлы.

  2. Если еще актуально:

    Установил компонент SpeechRecognition1 (во вложении)

    Накидываю на форму компонент TSpeechRecognition из панели компонентов

    в нем имеются свойства(у меня следующие):

    AlwaysGuesses: true;
    Language: ru-RU;
    Prompt: Пожалуйста скажите ЧЕ нибудь!
    Объявите глобально FSpeech: TStrings; является своего рода посредником передачи данных иначе все глючит)
    Теперь при необходимости вызывайте SpeechRecognition1.ListenFor(FSpeech); появится окно обработки голоса
    Далее в компоненте обработчике OnRecognitionEx прописываем куда распознанный текст должен попасть
      Edit1.Text := Guesses[0];

    Ссылка на источник http://delphi.org/2014/10/voice-enable-your-android-apps/ но кажись сейчас можно скачать только Триал версию, а во вложении полная версия (да простят меня Боги!B)), демки там есть, а также примеры для перевода текста в голос.

    Speech.zip

  3. Создана группа для знакомства и общения разработчиков, использующих инструменты Fire-Monkey.
    Небольшой свод правил в группе Fire-Monkey:
    - Не стоит описывать проблему, скрины и тд. не изучив необходимую литературу и форум, если решения все-таки нет, необходимо создать тему на форуме fire-monkey.ru и скинуть в группу ссылку; 
    - необходимо учитывать часовые пояса, в случае если на тему в Форуме долго нет ответа;
    - можно постить новости IT-рынка связанных с Fire-Monkey и RAD-studio, iOS и Android;
    - «баяны», «мемы» и приколы ;) касательно тематике чата приветствуются, желательно в небольшом количестве;
    - скриншоты и описание программ написанных на Fire-Monkey тоже приветствуются;
    - будьте вежливыми, ведь вежливость – это утонченность речи, благопристойность манер и поведения;
    Запрещено:
    - запрещено задавать элементарные вопросы касательно разработки, для этого есть куча литературы;
    - запрещены сообщения с большим описание проблемы и кода, для этого есть всем известный форум;
    - навязчивая реклама компании\приложения в чате под запретом;
    - оскорбления в адрес участников и в адрес Embarcadero запрещены;
    - запрещены спам, порнография и подобная грязь;

    @fire_monkey в Telegram

  4. Вообщем так как андройд не поддерживает функцию определения соединения, сделал через журнал звонков

    В Андройде после звонка если было соединение, время звонка будет больше нуля.

    //PhoneDialerService.OnCallStateChanged := MyOnCallStateChanged;

    На Disconnected проверяю журнал звонков, так как бывает не успевает падать информация использую таймер с интервалом 1 секунда, ниже приведен код в нем или iOS соединения и все ок или андройд на дисконекте и пуск таймера.

    procedure TForm_Main.MyOnCallStateChanged(const ACallID: String; const ACallState: TCallState);
    begin
      case ACallState of
        TCallState.Connected:
          begin 
    {$IFDEF IOS} TThread.Synchronize(nil, ShowDialDialog); {$ENDIF}
          end;
        TCallState.Disconnected:
          begin
    {$IFDEF ANDROID} TimerCallCheck.Enabled := true; {$ENDIF}
            PhoneDialerService.OnCallStateChanged := nil;
          end;
      end;
    end;

    Пока не добавил такую архитектуру с ТТаском и Синхронизацией были иногда вылеты приложения

    procedure TForm_Main.TimerCallCheckTimer(Sender: TObject);
    begin
      TimerCallCheck.Enabled := false;
      TTask.Run(
        procedure
        var
          Dur: Int64;
        begin
          Dur := CheckStat; //Функция проверки журнала
          TThread.Synchronize(nil,
            procedure
            begin
              if Dur = -1 then 
                TimerCallCheck.Enabled := true
              else
              begin
                TimerCallCheck.Enabled := false;
                if Dur > 0 then
                  ShowDialDialog; //Вызывается форма у меня в приложении
              end;
            end);
        end);
    end;

     

    function TForm_Main.CheckStat: Int64;
    var
      cursor: JCursor;
      Dtime, CallDuration: Int64;
      JsortOrder, JSelection: String;
      wJQueryParams: TJavaObjectArray<JString>;
    begin
      Result := 0;
      wJQueryParams := TJavaObjectArray<JString>.Create(4);
      wJQueryParams[0] := TJCallLog_Calls.JavaClass.CACHED_NAME;
      wJQueryParams[1] := TJCallLog_Calls.JavaClass.NUMBER;
      wJQueryParams[2] := TJCallLog_Calls.JavaClass.DURATION;
      wJQueryParams[3] := TJCallLog_Calls.JavaClass.DATE;
    
      JsortOrder := 'date DESC LIMIT 1';
      Dtime := (DateTimeToUnix(Now, true) - 360) * 1000;  //Последние пять минут
      JSelection := 'number = "+77017017708" AND type = 2 AND date > ' + IntToStr(Dtime);
    
      cursor := TAndroidHelper.Activity.getContentResolver.query(TJCallLog_Calls.JavaClass.CONTENT_URI, wJQueryParams,
        StringToJString(JSelection), nil, StringToJString(JsortOrder));
      if (cursor.getCount > 0) then
      begin
        while (cursor.moveToNext) do
        begin
          CallDuration := StrToInt64(JStringToString(cursor.getString(cursor.getColumnIndex(TJCallLog_Calls.JavaClass.DURATION))));
          Result := CallDuration;
        end;
      end
      else
        Result := -1;
      cursor.Close;
      FreeAndNil(wJQueryParams);
    end;

     

  5. 52 минуты назад, FeLDMARShaL сказал:

    Сейчас подходит время публикации очередного приложения, после его успешной публикации переведем остальные наши приложения на эти компоненты, и забудем о проблеме как страшный сон. Больше не будем использовать для мобильной разработки компоненты RTC, их саппорт культурно объяснил что исправлять он не будет торопиться эту проблему.

    На INDY все прекрасно работает., после обновление Berlin и Xcode надо было еще раз на Indy попробовать.

  6. 4 часа назад, FeLDMARShaL сказал:

    Нужна публикация, занимаюсь проблемой в плотную. Как оказалось то же самое прилоежние на андройде, который подключен к той же маковской сети NAT64/DNS64 без проблем выходит в инет. Получается запара именно в iOS девайсах. У кого нибудь за это время появились какие нибудь идеи?

    Переход на новый берлин не исправил проблему. Есть люди которые смогли опубликовать приложение которое работает с сетью, может кто поделится опытом?

     

    Было за неделю 5 отказов (2 точно таких же), пока не перешел на Berlin и не обновил Mac на EL Capitan, ну и соответственно последний Xcode.

    Скиньте описание отказа

    2016-08-09_15-17-58.png

  7. Было за неделю 5 отказов (2 точно таких же), пока не перешел на Berlin и не обновил Mac на EL Capitan, ну и соответственно последний Xcode.

    У меня был Seatle (но С..КА не Update 1) , а в BugFix Seatle Update 1 есть такой исправленный баг -> 

    RSP-12744

    iOS app constantly rejected in AppStore

    IDE, IDE\Deployment

    https://quality.embarcadero.com/browse/RSP-12744

    Думаю вам достаточно обновить до Update 1

    Кстати (может это и элементарно) чуток попарился из-за того что не правильно прикрепил новый plist(для поддержки шрифта) в Deploy, так как для ios32 ios64 они разные(это понятно) но и для ApplicationStore он другой)

    Ну и очень радует что проверку они начали делать в течении суток.:)

    Пожалуйста скажите что у Вас тоже просто обычный Seatle!! Я хоть успокоюсь что я ни один такой :blink:, который время в пустую потратил :D

  8. Было бы очень хорошо если бы добавили fgApplicationEvents TApplicationEventMessage

    Сколько мучился не срабатывают события стандартные Form Show/Hide и у в fgApplicationEvents  тоже не работают (Android/iOS)

    А вот сворачивание и разворот отлично работает на TApplicationEvent.BecameActive и TApplicationEvent.EnteredBackground:

    P.S. Delphi Cookbook 270 стр.

      //uses System.Messaging.pas
      TPlatformServices.Current.SupportsPlatformService(IFMXLoggingService, IInterface(FLoggingService));
      FSubscrID := TMessageManager.DefaultManager.SubscribeToMessage(TApplicationEventMessage,
        procedure(const Sender: TObject; const Msg: TMessage)
        var
          AppEvent: TApplicationEventMessage;
        begin
          AppEvent := TApplicationEventMessage(Msg);
    
          case AppEvent.Value.Event of
            TApplicationEvent.FinishedLaunching:
              LogEvent('App Finished Launching');
            TApplicationEvent.BecameActive:
              LogEvent('App Became Active');
            TApplicationEvent.WillBecomeInactive:
              LogEvent('App Will Become Inactive');
            TApplicationEvent.EnteredBackground:
              LogEvent('App Entered Background');
            TApplicationEvent.WillBecomeForeground:
              LogEvent('App Will Become Foreground');
            TApplicationEvent.WillTerminate:
              LogEvent('App Will Terminate');
            TApplicationEvent.LowMemory:
              LogEvent('App Low Memory');
            TApplicationEvent.TimeChange:
              LogEvent('App Time Change');
            TApplicationEvent.OpenURL:
              LogEvent('App Open URL');
          end;
        end);
  9. Не обязательно видеть телефон что-бы скомпилировать IPA файл, IPA соберёт 32 и 64 бита, поэтому будьте внимательны, все таки стоит сперва скомпилировать и под 32 бита и 64 для проверки, например в Deploy 32 бита я забыл добавить шрифты, сформировал IPA, на 64 бита все отлично, а вот на 32 не было FontAwesome.

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