Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создание независимой службы местоположения для Android с использованием Embarcadero Delphi XE10 Seattle Update

Delphi , Программа и Интерфейс , Процессы и Сервисы

Введение

В данной статье рассматривается процесс создания службы местоположения для Android-приложений, используя среду разработки Embarcadero Delphi XE10 Seattle Update. Основной задачей является разработка службы, которая будет работать независимо от основного приложения, получая данные о местоположении каждые 5 секунд и сохраняя их в базу данных.

Проблема

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

Решение

Для решения проблемы необходимо использовать сервисные компоненты, совместимые с Android-платформой. Важно понимать, что не все компоненты Delphi поддерживают работу в фоновом режиме. Рассмотрим пример использования LocationSensor в службе:

  1. Добавьте в свой проект модули System.Sensors и System.Android.Sensors.
  2. Внесите изменения в файлы System.Sensors.pas и System.Android.Sensors.pas, следуя инструкциям из альтернативного ответа (пatches для поддержки работы с контекстом приложения).
  3. Используйте LocationSensor для получения данных о местоположении:
uses System.Sensors, System.Android.Sensors;
var
  FSensors: TSensorArray;
  Sensor: TCustomSensor;
begin
  TSensorManager.Current.Active := true;
  FSensors := TSensorManager.Current.GetSensorsByCategory(TSensorCategory.Location);
  Sensor := nil;
  for Sensor in FSensors do
  begin
    if TCustomLocationSensor(Sensor).SensorType = TLocationSensorType.GPS then
    begin
      Sensor := TCustomLocationSensor(Sensor);
      Break;
    end;
  end;
  if not Assigned(Sensor) then
    Exit; { нет доступного сенсора местоположения }
  if not Sensor.Started then
    Sensor.Start;
end;

Подтвержденный ответ

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

Альтернативный ответ

В случае, если TTimer не работает как ожидается, можно использовать анонимные потоки для выполнения задач и TThread.CurrentThread.Sleep для задержки в главном потоке:

function TServiceModule.AndroidServiceStartCommand(const Sender: TObject;
  const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
  Result := TJService.JavaClass.START_STICKY;
  TThread.CreateAnonymousThread(procedure
    begin
      repeat
        TThread.Current.Sleep(MSecsPerSec);
        TThread.CreateAnonymousThread(procedure
          DoStuff();
        end).Start;
        TThread.Current.Sleep(MSecsPerSec);
      until (TThread.Current.CheckTerminated);
    end).Start;
end;

Заключение

Создание независимой службы местоположения для Android-приложений с использованием Embarcadero Delphi XE10 Seattle Update требует понимания особенностей работы с фоновыми сервисами Android и использования соответствующих компонентов Delphi. Приведенные примеры кода помогут разработчикам реализовать необходимую функциональность.

Создано по материалам из источника по ссылке.

Создание службы местоположения для Android-приложений в Embarcadero Delphi XE10 Seattle, которая работает независимо от основного приложения и использует компоненты, совместимые с фоновым режимом Android.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Процессы и Сервисы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:50:38/0.003244161605835/0