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

Android Services


Ingalime

Вопрос

Добрый день.

Пытаюсь по этому короткому видео от эмбаркадеро воспроизвести пример применения Android Services: https://www.youtube.com/watch?v=eZzMBHNoj4o

На 6.30 времени видео автор показывает, что если выгрузить приложение, то сервис его перезапускает.

После запуска своего приложения Андрод 64 бит, я у себя вижу, что у меня написано в запущенных приложениях, что у моего приложения запущены и приложение и его сервис.

Перекрываю окно запущенного приложения другим окном и спустя пару минут вижу вижу, что надпись меняется на "Нет активных служб". Т.е. умирает и сервис и приложение.

В чем может быть проблема? Телефон Readmi 5A Андроид 8.1 MIUI 11.0.2 RAD 10.3.3

Код прописан:

function TDM.AndroidServiceStartCommand(const Sender: TObject;
  const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
   Result := TJService.JavaClass.START_STICKY;
end;

 

Изменено пользователем Ingalime
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Тут говорят, что сервер должен быть Remote. Это кажется логичным. Не понятно как же у автора видео работает локальный сервер:

https://stackoverflow.com/questions/40692546/android-service-doesnt-work-when-i-close-app

Ссылка на комментарий
  • 0
  • Модераторы
14 часов назад, yarockiisergei сказал:

Похоже это невозможно.

Всё возможно...

8 часов назад, Ingalime сказал:

Не понятно как же у автора видео работает локальный сервер:

В данном случае, у Джима код отрабатывал как ожидается, по причине того (я предполагаю), что он тестировал его на Nexus 5 (2015 чистый Android 6). Я также занимался изучением сервисов примерно в 2016, но тестировал этот код на многих девайсах. Как помню, на Android 4.4.2 всегда отрабатывал как ожидается. А вот на более новых версиях + (это жирный плюс, влияющий очень на многое) девайсах разных производителей (очень выделялись на тот момент Xiaomi) дела обстояли очень плохо, т.к. производители вводили свои ограничения для приложений (например, "авто запуск приложения/сервиса" - пользователь должен был разрешить подобное поведение в настройках приложения).

 

В 09.10.2020 в 10:07, Ingalime сказал:

В чем может быть проблема? Телефон Readmi 5A Андроид 8.1 MIUI 11.0.2 RAD 10.3.3

Учитывая свой опыт, могу дать такой совет:

Попробуйте дать все возможные разрешения на автозапуск приложения/сервиса примерно тут: "Безопасность – Разрешения – Автозапуск – Название вашего приложения" и проверить код ещё раз.

Вот ещё небольшое описание из моего старого проекта:

Цитата

На других устройствах с последней версией Андроида, необходимо отключить оптимизацию для приложения. Сделать это можно в специальном меню.

Примеры:
Xiaomi MI Note 3 (Android 7.1.1-MIUI Global 9.5):
- Настройки - Приложения - Разрешения - Автозапуск - Найти приложение и дать разрешение на автозапуск
или
- Настройки - Приложения - Все приложения - Найти приложение и войти в меню - Включить Автозапуск

Asus_Z00LD (Android 6.0.1):
- Откройте шторку сверху - Менеджер автозапуска - Название вашего приложения - Включить Автозапуск
- Настройки – Приложения – Значок «Шестерёнки» - Экономия заряда батареи - Название вашего приложения – Отключить экономию заряда
или
- Все приложения - Мобильный диспетчер - Менеджер автозапуска - Название вашего приложения
- Все приложения - Мобильный диспетчер - Уведомления - Название вашего приложения - Включить (если выключены)

 

 

Из-за всех этих изменений от производителей, тема стала достаточно непростой. По этой причине считаю, что начинать нужно с нуля, т.е. с официальной справки гугла:

Службы

Foreground services

Ссылка на комментарий
  • 0

 

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

FMX не пригодна для создания музыки в фоне. Берем хороший плеер из маркета и все работает как надо на любом телефоне без дополнительных извращений со стороны пользователя...

Ссылка на комментарий
  • 0

Попробуйте еще сделать так

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

       jpn:=TAndroidHelper.Context.getPackageName;
       ps:=TAndroidHelper.Context.getSystemService(TJContext.JavaClass.POWER_SERVICE);
    if ps <> nil then
      begin
      pm := TJPowerManager.Wrap((ps as ILocalObject).GetObjectID);
      end;
     if pm.isIgnoringBatteryOptimizations(jpn)=false then
        begin

         Intent := TJIntent.Create;

          Intent.setAction(TJSettings.JavaClass.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
         intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(jpn)));
         TAndroidHelper.Context.startActivity(Intent);
        end;

 

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...