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

Pax Beach

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

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

  • Посещение

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

    12

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

  1. Like
    Pax Beach получил реакцию от PowerOwl в Использование нативных LocalBroadcastManager и BroadcastReceiver   
    Из PlatformSDK (PlatformSDKs\android-sdk-windows\sources\android-23\android\support\v4\content\) портировал в Delphi класс TJLocalBroadcastManager.
    Это очень полезный класс, если вы не хотите рассылать сообщения по всей системе, а есть необходимость общаться только внутри приложения или между хост-приложением и сервисом.
    Во вложении сам класс, в своем приложении убедитесь, что в Target Platforms (Android) → Android → Libraries включена библиотека android-support-v4.dex.jar.
     
    Прилагаю пример, для изучения и использования в работе, который демонстрирует работу обычного BroadcastReceiver и LocalBroadcastReceiver.
    В примере демонстрируется работа сообщений в приложении и сервисе. Сначала делаем build проекта LBCRService, потом будет доступна возможность собрать LocalBCR.
    Собираю в Berlin 10.1, но на младших версиях тоже должно работать, по крайней мере в Seatlle.
     
    В реализации методов
    procedure RegisterReceiver(); procedure UnRegisterReceiver(); необходимо снять комментарий с соответствующих строчек, в зависимости от того, какой тип ресивера вы хотите использовать.
     
     
    Androidapi.JNI.LocalBroadcastManager.pas.zip
    LocalBroadCastReceiver.zip
  2. Like
    Pax Beach получил реакцию от Ingalime в Использование нативных LocalBroadcastManager и BroadcastReceiver   
    Из PlatformSDK (PlatformSDKs\android-sdk-windows\sources\android-23\android\support\v4\content\) портировал в Delphi класс TJLocalBroadcastManager.
    Это очень полезный класс, если вы не хотите рассылать сообщения по всей системе, а есть необходимость общаться только внутри приложения или между хост-приложением и сервисом.
    Во вложении сам класс, в своем приложении убедитесь, что в Target Platforms (Android) → Android → Libraries включена библиотека android-support-v4.dex.jar.
     
    Прилагаю пример, для изучения и использования в работе, который демонстрирует работу обычного BroadcastReceiver и LocalBroadcastReceiver.
    В примере демонстрируется работа сообщений в приложении и сервисе. Сначала делаем build проекта LBCRService, потом будет доступна возможность собрать LocalBCR.
    Собираю в Berlin 10.1, но на младших версиях тоже должно работать, по крайней мере в Seatlle.
     
    В реализации методов
    procedure RegisterReceiver(); procedure UnRegisterReceiver(); необходимо снять комментарий с соответствующих строчек, в зависимости от того, какой тип ресивера вы хотите использовать.
     
     
    Androidapi.JNI.LocalBroadcastManager.pas.zip
    LocalBroadCastReceiver.zip
  3. Like
    Pax Beach получил реакцию от Ingalime в Одновременное обращение к БД Sqlite из программы и из сервиса   
    Я нашел решение, к сожалению, пока только для работы с UniDAC:
    Обновил UniDAC компоненты для Berlin до последней версии (6.3.12).
    Компоненты TUniConnection и TUniQuery отлично работают с SQLite в Android Service. FireDAC в Android Service пока запустить не удалось, но у меня такой задачи нет.
    В Deployment host приложения добавляю файл базы данных, Remote Path задаю ".\assets\internal\". И спокойно из сервиса получаю к нему доступ. Мой сервис локальный в одном потоке с приложением. Если делать Intent Service или Remote — наверное, придется помещать файл в другой, доступный каталог, или общаться через намерения (Intents).
    Надеюсь мой код будет полезен для вас.
    procedure TDM.conSQLiteBeforeConnect(Sender: TObject); begin {$IF DEFINED(iOS) or DEFINED(ANDROID)} conSQLite.Database := TPath.Combine(TPath.GetDocumentsPath, 'mybase.sqlite'); {$ENDIF} end; procedure TDM.conSQLiteError(Sender: TObject; E: EDAError; var Fail: Boolean); begin Log('--- DB error: %s:', [E.Message]); Fail := False; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin Log('+ START with Intent: ' + JStringToString(Intent.getAction.toString), []); if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin try conSQLite.Disconnect; Log('- DB disconnected', []); except on E: Exception do Log('- can not to disconnect DB', [E.Message]); end; Log('... service to be stoped', []); JavaService.stopSelf; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service end else begin Log('... service started', []); try conSQLite.Connect; Log('+ DB connected', []); UniQuery.SQL.Text := 'select count(*) as ALLREC from orders'; UniQuery.Open; if UniQuery.RecordCount > 0 then begin UniQuery.First; Log('... record count: %s', [UniQuery.FieldByName('ALLREC').AsString]); end; UniQuery.Close; except on E: Exception do Log('- can not to connect DB: %s', [E.Message]); end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops end; end;
  4. Thanks
    Pax Beach получил реакцию от Mike_var в Пример создания Android приложения в RAD Studio 10 Seattle для работы c сервером MySQL. Работа с компонентами UniDAC от Devart.   
    Столкнулся с проблемой взаимодействия своего приложения Android с сервером MySQL в локальной сети.
    Задача простая: скачать на планшет таблицу с данными с сервера MYSQL в локальной сети, выполнить на планшете действия с данными, выгрузить обратно на MySQL уже в другую таблицу результат действий.
    Начал разбираться, пересмотрел и перечитал множество примеров других разработчиков. Оказалось, что в RAD Studio 10 Seattle нет компонентов, способных заставить работать Android устройство напрямую с сервером MySQL.
    Конечно есть FireDAC, dbExpress.
    По факту, хоть разработчики dbExpress и заявляют, что компонент TSQLConnection работает с Android platform, но при попытке открыть соединение с MySQL сервером на Android устройстве сообщает об ошибке. На Windows компонент отрабатывает соединение нормально.
     

      Разработчики FireDAC честно заявили, что их соединение с MySQL на Android работать не будет.

     
     
    Какие есть выходы:
    1.    Создать DataSnap сервер, который будет установлен на сервере и взаимодействовать с Android клиентом и сервером MySQL. DataSnap будет являться прослойкой между Android и MySQL, через него можно осуществлять обмен данными, обернутыми в JSON.
    Для меня этот вариант не подходит, потому что по различным причинам устанавливать на сервер (или даже рабочую станцию) дополнительный сервер приложений не представляется возможным.
    2.    Использовать дополнительные компоненты, позволяющие работать с MySQL из-под Android и iOS.
     
    Поиск нужных компонентов для RAD Studio показал, что все они платные. И уж если бесплатных не найти, покупать нужно хороший продукт, которые поддерживает как минимум MySQL, SQLite, SQLServer.

     
     
    Не буду начинать холивар, скажу только, что для меня наиболее подходящим оказался компонент UniDAC от Харьковской компании Devart. Решающими факторами стали: удобнная политика лицензирования, приемлемая для задач цена, быстрая скорость ответа технической поддержки, конечно, поддержка всех распространенных серверов баз данных и нужных мне платформ, работа с большими объемами данных (более 100 тыс. записей), возможность 2 месяца тестировать компоненты, получить существенную скидку при покупке, рекомендации разработчиков с форума www.fire-monkey.ru .
     

     
     
    На сайте www.devart.com выбрал свою версию RAD Studio и скачал инсталяторы компонентов UniDAC и MyDAC. Установил и запустил RAD Studio. В главном меню RAD Studio появились соответствующие пункты меню, а в палитру компонентов добавились три закладки.
     

     
     
    Вы самостоятельно может скачать и попробовать компоненты можно по этой ссылке https://www.devart.com/unidac/
     
    Реализация кода:
                    Итак, я собрал тестовый стенд. На котором разместил 3 соединения, 3 набора данных, три кнопки для соединения и разъединения с сервером MySQL, и две метки, в которые при успешном соединении записываю случайную запись «Название компании» из таблицы «Покупатели», в одну Ansi формат, в другую UTF8. В качестве демонстрационной базы данных использую Northwind, поставляемую с RAD Studio.
                    Как видно на рисунке, тестировалась работа компонентов dbExpress, MyDAC, UniDAC.
     

     
     
    Двойной щелчок на компоненте соединения, открываются свойства соединения, прописываем для компонентов необходимые параметры и запускаем.

     
     
                    Я прилагаю пример приложения, который вы самостоятельно сможете запустить на своей RAD Studio.
                    В результате, как и ожидалось, компоненты dbExpress не смогли соединиться с базой данных и вывалился с ошибкой “TDBXError: Unable to find procedure DBXLoader_GetDriver”. Которую было не просто отловить из-за отсутствия в компоненте обработчика Connection Timeout.

     
     
                    Компоненты MyDAC и UniDAC мгновенно соединялись с MySQL и считывали записи.
    Моя задача решена, переписываю решение в рабочий проект. Надеюсь и вам будет полезен этот пример.
     

    MyDACvsDbExpressDemo.zip
  5. Like
    Pax Beach получил реакцию от Alisson R Oliveira в Получение GPS координат из сервиса   
    У большинства пользователей, если не у всех, эти параметры, касаемо адреса, будут занулены.
    Без интернета и API (того же гугла) этот вопрос не решить.
     
  6. Like
    Pax Beach отреагировална Тимур Абилов в Контролировать приход SMS   
    Привет всем!!! Очень надеюсь, что тема еще живая, т.к. у гугла теперь новые требования: чтобы использовать разрешения чтения и получения смс, нужно, чтобы это было основной функцией приложения, и пользователь сам назначил это приложение обработчиком смс по-умолчанию.
    Чтобы реализовывать авторизацию приложения по смс, сам гугл предлагает воспользоваться SmsRetriever, для которого данные разрешения не требуются.
    Насколько, я понял, получать интент с СМС можно будет через BroadcastReceiver, реализованный в данной теме, но для этого сначала надо оптравить "заявку" SmsRetriever, чтобы он сгенерил для приложения интент с действием SmsRetriever.SMS_RETRIEVED_ACTION. У гугла для этого приводится код на яве:
    // Get an instance of SmsRetrieverClient, used to start listening for a matching // SMS message. SmsRetrieverClient client = SmsRetriever.getClient(this /* context */); // Starts SmsRetriever, which waits for ONE matching SMS message until timeout // (5 minutes). The matching SMS message will be sent via a Broadcast Intent with // action SmsRetriever#SMS_RETRIEVED_ACTION. Task<Void> task = client.startSmsRetriever(); // Listen for success/failure of the start Task. If in a background thread, this // can be made blocking using Tasks.await(task, [timeout]); task.addOnSuccessListener(new OnSuccessListener<Void>() {   @Override   public void onSuccess(Void aVoid) {     // Successfully started retriever, expect broadcast intent     // ...   } }); Пожалуйста, помогите, кто шарит, перевести это на дельфи. В библиотеку этот класс не импортирован:(
    А еще лучше сразу скомпоновать это вместе с BroadcastReceiver в одном рабочем примере.
  7. Like
    Pax Beach отреагировална gateofdenied в Данные из ClipBoard с форматированием   
    В общем разобрался. 
    Вдруг кому пригодится
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      buf: array[0..60] of Char;
      n: Integer;
      fmt: Word;
      H: THandle;
      P: PAnsiChar;
      S:UnicodeString;
    begin
      for n := 0 to Clipboard.FormatCount - 1 do
      begin
        fmt := Clipboard.Formats[n];
        Clipboard.Open;
        if GetclipboardFormatName(fmt, buf, Pred(Sizeof(buf))) <> 0 then
          begin
              begin
                 H := Clipboard.GetAsHandle(fmt);
                 P := GlobalLock(H);
                 S:=UnicodeString(P);
                 Memo1.Lines.Add(P);
                 GlobalUnlock(H);
              end;
          end;
        Clipboard.Close;
      end;
    end;
  8. Like
    Pax Beach получил реакцию от david_yusupov в Убить поток TThread?   
    Посмотрите класс, реализующий альтернативный Sleep (под катом).
    соль в следующем:
    создаем потомка TThread, запускаем, ждем завершения:
    class function TDelays.Delay(aDuration: integer): TDelay; begin if not Assigned(FList) then FList := TList<TDelay>.Create; Result := TDelay.Create(aDuration); FList.Add(Result); Result.FreeOnTerminate := false; Result.OnTerminate := OnTerminateItem; Result.Start; Result.WaitFor; end; Работаем с ним нежно
    procedure TDelay.Execute; begin inherited; while (not Terminated) and (MilliSecondsBetween(now, FStart) < FDelay) do begin sleep(100); end; end; По завершении работы убиваем:
    class procedure TDelays.OnTerminateItem(Sender: TObject); begin TTask.Run( procedure begin try if Assigned((Sender as TDelay)) then begin (Sender as TDelay).Free; FList.Remove((Sender as TDelay)); end; except end; end); end; А можем убить и досрочно:
    (TObject as TDelay).Free; потому что в деструкторе стоит такой код:
    destructor TDelay.Destroy; begin Terminate; if (not Suspended) then WaitFor; inherited; end;  
    uDelays.zip
  9. Like
    Pax Beach получил реакцию от Anatoliy в Получение GPS координат из сервиса   
    Для работы локатора в свернутом приложении, стоит работу с GPS вынести в сервис. Понятно, что это только для Android.
    Вытащить адрес, видимо речь о почтовых адресах, нужно использовать API Google services, у них такое есть.
     
  10. Like
    Pax Beach получил реакцию от AngryOwl в Инструкция по установке набора компонентов FGX   
    Сообщение об ошибке справедливое.
    Но, всегда нужно помнить, что циганский поезд, типа Эмбы лучше ставить в отдельную не системную папку, желательно с правами на запись.
     
  11. Like
    Pax Beach получил реакцию от Ingalime в Определение включена ли на устройстве возможность применять mock location   
    Просто не давать права на mock location. В новых версиях Android mock можно использовать только для приложения, у которого такое разрешение включено.
  12. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Использование нативных LocalBroadcastManager и BroadcastReceiver   
    емба сломала это еще в Берлине, в Токио не починили.
    Службы "нормально" работают только в Сиетле
  13. Haha
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в StatusBar Color   
    попробуйте последнюю версию
  14. Thanks
    Pax Beach получил реакцию от x11 в Использование нативных LocalBroadcastManager и BroadcastReceiver   
    StartCommand вызывается каждый раз, когда мы вызываем из приложения StartService.
    А как обрабатывать намерение (Intent) переданный в этот метод — это наше дело.
    У меня в этой команде обрабатывался и старт и стоп.
    Убивать приложение через KillBackgroundProcess не обязательно, это осталось от моего другого приложения, где выгрузить процесс из памяти было критичным.
     
  15. Like
    Pax Beach получил реакцию от Kitty в Использование нативных LocalBroadcastManager и BroadcastReceiver   
    StartCommand вызывается каждый раз, когда мы вызываем из приложения StartService.
    А как обрабатывать намерение (Intent) переданный в этот метод — это наше дело.
    У меня в этой команде обрабатывался и старт и стоп.
    Убивать приложение через KillBackgroundProcess не обязательно, это осталось от моего другого приложения, где выгрузить процесс из памяти было критичным.
     
  16. Like
    Pax Beach отреагировална krapotkin в JSON   
    тут уже не раз хвалили, и я в том числе, X-SuperObject
  17. Like
    Pax Beach получил реакцию от x11 в Использование нативных LocalBroadcastManager и BroadcastReceiver   
    Из PlatformSDK (PlatformSDKs\android-sdk-windows\sources\android-23\android\support\v4\content\) портировал в Delphi класс TJLocalBroadcastManager.
    Это очень полезный класс, если вы не хотите рассылать сообщения по всей системе, а есть необходимость общаться только внутри приложения или между хост-приложением и сервисом.
    Во вложении сам класс, в своем приложении убедитесь, что в Target Platforms (Android) → Android → Libraries включена библиотека android-support-v4.dex.jar.
     
    Прилагаю пример, для изучения и использования в работе, который демонстрирует работу обычного BroadcastReceiver и LocalBroadcastReceiver.
    В примере демонстрируется работа сообщений в приложении и сервисе. Сначала делаем build проекта LBCRService, потом будет доступна возможность собрать LocalBCR.
    Собираю в Berlin 10.1, но на младших версиях тоже должно работать, по крайней мере в Seatlle.
     
    В реализации методов
    procedure RegisterReceiver(); procedure UnRegisterReceiver(); необходимо снять комментарий с соответствующих строчек, в зависимости от того, какой тип ресивера вы хотите использовать.
     
     
    Androidapi.JNI.LocalBroadcastManager.pas.zip
    LocalBroadCastReceiver.zip
  18. Like
    Pax Beach получил реакцию от Вольдемар в Запись и сохранение голоса в течение 10 секунд после запуска Android сервиса (Пример)   
    Я реализовал пример работы с микрофоном и таймером в Android сервисе, как указано в теме вопроса.
    Каждый раз, когда вы отправляете в сервис StartCommand или сервис перезапускается, включается запись с микрофона, и сохраняется в каталог с музыков в файл "myrecord.3gp".
    Надеюсь, мой пример поможет вам создать новые полезные решения. В этом случае пожалуйста делитесь ими с участниками нашего сообщества.
    Для отладки своих программ на Android используйте запись в LOGI и чтение при помощи monitor.bat (PlatformSDKs\android-sdk-windows\tools).
     
    uses ... AndroidApi.JNI.Media, // JMediaRecorder AndroidApi.Timer, // Timer ...; Const TimerInterval = 1000; TimerCounterSecLimit = 10; type TDM = class(TAndroidService) ... private FTimerHandle: Integer; FRecording: Boolean; procedure StartRecord; procedure StopRecord; procedure StartTimer; procedure StopTimer; public FAudioRec: JMediaRecorder; end; procedure Log(const Fmt: string; const Params: array of const); overload; var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end; procedure Log(const Source: string); overload; var M: TMarshaller; begin LOGI(M.AsUtf8(Source).ToPointer); end; procedure TDM.AndroidServiceCreate(Sender: TObject); begin FTimerHandle := 0; FTimerCounter := 0; FRecording := false; end; procedure TDM.AndroidServiceDestroy(Sender: TObject); begin StopTimer; StopRecord; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin StopTimer; StopRecord; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service Log('- service stoped', []); end else begin if not FRecording then begin Log('... sound record to be started', []); StartRecord; StartTimer; end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops Log('+ Service started', []); end; end; procedure TDM.StartRecord; begin StopRecord; FAudioRec := TJMediaRecorder.Create; FAudioRec.setAudioSource(TJMediaRecorder_AudioSource.JavaClass.MIC); FAudioRec.setOutputFormat(TJMediaRecorder_OutputFormat.JavaClass.THREE_GPP); FAudioRec.setAudioEncoder(TJMediaRecorder_AudioEncoder.JavaClass.AMR_NB); FAudioRec.setOutputFile(StringToJString(TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp'))); try FAudioRec.Prepare(); FAudioRec.start; FRecording := True; Log('+ Start record to %s', [TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp')]); except on E: Exception do Log('- Error in mic recording: %s', [E.Message]); end; end; procedure TDM.StopRecord; begin if Assigned(FAudioRec) then begin if FRecording then begin FRecording := false; try FAudioRec.stop(); FAudioRec.release(); Log('- Mic recording is stoped'); except on E: Exception do Log('- Error in mic stop recording: %s', [E.Message]); end; end; end else begin FRecording := false; end; end; procedure TDM.WaitComplete(TimerId: Integer); begin if FTimerCounter < TimerCounterSecLimit then begin Log('+++ Timer is triggered %d time.', [FTimerCounter]); inc(FTimerCounter); end else StopTimer; end; procedure TDM.StartTimer; begin FTimerCounter := 0; if FTimerHandle = 0 then begin FTimerHandle := AndroidTimerCreate; AndroidTimerSetInterval(FTimerHandle, TimerInterval); end; AndroidTimerSetHandler(WaitComplete); Log('+ Timer started', []); end; procedure TDM.StopTimer; begin if FTimerHandle > 0 then begin Log('... MIC recording to be stopped'); StopRecord; AndroidTimerSetHandler(nil); Log('- Timer stoped', []); end; end; end.  
  19. Like
    Pax Beach получил реакцию от Alex7wrt в Запись и сохранение голоса в течение 10 секунд после запуска Android сервиса (Пример)   
    Я реализовал пример работы с микрофоном и таймером в Android сервисе, как указано в теме вопроса.
    Каждый раз, когда вы отправляете в сервис StartCommand или сервис перезапускается, включается запись с микрофона, и сохраняется в каталог с музыков в файл "myrecord.3gp".
    Надеюсь, мой пример поможет вам создать новые полезные решения. В этом случае пожалуйста делитесь ими с участниками нашего сообщества.
    Для отладки своих программ на Android используйте запись в LOGI и чтение при помощи monitor.bat (PlatformSDKs\android-sdk-windows\tools).
     
    uses ... AndroidApi.JNI.Media, // JMediaRecorder AndroidApi.Timer, // Timer ...; Const TimerInterval = 1000; TimerCounterSecLimit = 10; type TDM = class(TAndroidService) ... private FTimerHandle: Integer; FRecording: Boolean; procedure StartRecord; procedure StopRecord; procedure StartTimer; procedure StopTimer; public FAudioRec: JMediaRecorder; end; procedure Log(const Fmt: string; const Params: array of const); overload; var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end; procedure Log(const Source: string); overload; var M: TMarshaller; begin LOGI(M.AsUtf8(Source).ToPointer); end; procedure TDM.AndroidServiceCreate(Sender: TObject); begin FTimerHandle := 0; FTimerCounter := 0; FRecording := false; end; procedure TDM.AndroidServiceDestroy(Sender: TObject); begin StopTimer; StopRecord; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin StopTimer; StopRecord; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service Log('- service stoped', []); end else begin if not FRecording then begin Log('... sound record to be started', []); StartRecord; StartTimer; end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops Log('+ Service started', []); end; end; procedure TDM.StartRecord; begin StopRecord; FAudioRec := TJMediaRecorder.Create; FAudioRec.setAudioSource(TJMediaRecorder_AudioSource.JavaClass.MIC); FAudioRec.setOutputFormat(TJMediaRecorder_OutputFormat.JavaClass.THREE_GPP); FAudioRec.setAudioEncoder(TJMediaRecorder_AudioEncoder.JavaClass.AMR_NB); FAudioRec.setOutputFile(StringToJString(TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp'))); try FAudioRec.Prepare(); FAudioRec.start; FRecording := True; Log('+ Start record to %s', [TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp')]); except on E: Exception do Log('- Error in mic recording: %s', [E.Message]); end; end; procedure TDM.StopRecord; begin if Assigned(FAudioRec) then begin if FRecording then begin FRecording := false; try FAudioRec.stop(); FAudioRec.release(); Log('- Mic recording is stoped'); except on E: Exception do Log('- Error in mic stop recording: %s', [E.Message]); end; end; end else begin FRecording := false; end; end; procedure TDM.WaitComplete(TimerId: Integer); begin if FTimerCounter < TimerCounterSecLimit then begin Log('+++ Timer is triggered %d time.', [FTimerCounter]); inc(FTimerCounter); end else StopTimer; end; procedure TDM.StartTimer; begin FTimerCounter := 0; if FTimerHandle = 0 then begin FTimerHandle := AndroidTimerCreate; AndroidTimerSetInterval(FTimerHandle, TimerInterval); end; AndroidTimerSetHandler(WaitComplete); Log('+ Timer started', []); end; procedure TDM.StopTimer; begin if FTimerHandle > 0 then begin Log('... MIC recording to be stopped'); StopRecord; AndroidTimerSetHandler(nil); Log('- Timer stoped', []); end; end; end.  
  20. Like
    Pax Beach отреагировална Rusland в Выполнение регулярных операций в сервисе - статистика   
    Переключил режим Энергосбережения с Оптимальный на Отключено и сразу проблема с коннектом пропала 
  21. Like
    Pax Beach получил реакцию от Rusland в Выполнение регулярных операций в сервисе - статистика   
    Проблема в MUI.
    Предполагаю, что надо искать решение в запросе разрешений на уведомления, разбудить телефон, показать приложение поверх других окон, еще что-нибудь такое. Потому что в MUI большой упор на энергосбережение, безопасность и спам.
    Я замучился уже с MUI, не для разработчиков ось =)
  22. Like
    Pax Beach получил реакцию от Anatoliy в Выполнение регулярных операций в сервисе - статистика   
    Проблема в MUI.
    Предполагаю, что надо искать решение в запросе разрешений на уведомления, разбудить телефон, показать приложение поверх других окон, еще что-нибудь такое. Потому что в MUI большой упор на энергосбережение, безопасность и спам.
    Я замучился уже с MUI, не для разработчиков ось =)
  23. Like
    Pax Beach получил реакцию от Rusland в Direct3D. Работа со снимками экрана   
    Библиотека для работы с изображениями находится здесь.
     
    Готовится описание.
     
  24. Like
    Pax Beach получил реакцию от #WAMACO в Direct3D. Работа со снимками экрана   
    Библиотека для работы с изображениями находится здесь.
     
    Готовится описание.
     
  25. Like
    Pax Beach получил реакцию от Mars M в Direct3D. Работа со снимками экрана   
    Библиотека для работы с изображениями находится здесь.
     
    Готовится описание.
     
×
×
  • Создать...