Задать вопрос

Какой наилучший способ продлить жизнь Foreground Service в MAUI?

Здравствуйте, вот код моего сервиса:
[Service(Exported = true, Name = "com.test.Foreground", ForegroundServiceType = Android.Content.PM.ForegroundService.TypeLocation)]
public class Foreground : Service, IServices
{
    public override IBinder OnBind(Intent intent)
    {
        throw new NotImplementedException();
    }
    [return: GeneratedEnum]
    public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
    {
        if (intent.Action == "START_SERVICE")
        {
            
            RegisterNotification();
        }
        else if (intent.Action == "STOP_SERVICE")
        {
           
            StopForeground(true);
            StopSelfResult(startId);
        }
        return StartCommandResult.NotSticky;
    }

    public void Start()
    {

        Intent startService = new Intent(MainActivity.ActivityCurrent, typeof(Foreground));
        startService.SetAction("START_SERVICE");
        MainActivity.ActivityCurrent.StartService(startService);
       
    }

    public void Stop()
    {
      

        Intent stopIntent = new Intent(MainActivity.ActivityCurrent, this.Class);
        nextTask.Dispose();
        stopIntent.SetAction("STOP_SERVICE");
        MainActivity.ActivityCurrent.StartService(stopIntent);
      
    

 
    private  async void RegisterNotification()
    {
     
       
      


        NotificationChannel channel = new NotificationChannel("Channel_Service", "Сервис работает!", NotificationImportance.Max);
        NotificationManager manager = (NotificationManager)MainActivity.ActivityCurrent.GetSystemService(Context.NotificationService);
        manager.CreateNotificationChannel(channel);
        Notification notification = new Notification.Builder(this, "Channel_Service")
            .SetContentTitle("Сервис работает!")
            .SetSmallIcon(Microsoft.Maui.Resource.Drawable.default)
            .SetOngoing(true)
       
            .Build();

        StartForeground(100, notification);

     
      await  Task.Run(async() => await nextTask.Main()); // после запуска открываю поток для моей задачи, которую я хочу выполнять во время работы сервиса.
        
    }

}


Интерфейс IServices нужен для простого запуска сервиса по методу.
Дело в том, что сервис работает около 30-40 минут, а затем прекращает свою работу.
Мне было бы очень интересно узнать, как создают сервисы, которые работают всегда? Например Spotify, GoodByeDPI?
Почему тот же GoodByeDPI работает 24/7 и android не останавливает его?
Заранее спасибо за помощь!
  • Вопрос задан
  • 2746 просмотров
Подписаться 4 Средний Комментировать
Решения вопроса 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
Увы, но андроид все больше скатывается в платформу для игрушек. Борьба за жизнь батарейки
делает использование служб все более сложным.
https://developer.android.com/develop/background-w...
Сейчас это пермишен и декларация целей использования.
Часть целей автоматом подтверждает робот (ИИ) смотрит, что у тебя еще например пермишины для работы с блютуз устройством и что программа действительно с ними работает (по описанию и наличию вызовов нужных методов).
А вот прочие цели придется дополнительно декларировать в кабинете разработчика.

В 13-м поменяли как служба может показать нотифи в шторке. Их теперь прячут от пользователей по умолчанию.

До сих пор остается актуальным способ "Please don't kill me". Отправлять пользователя в раздел настроек системы для включения приложения в исключения энергосбережения.

Единственное исключение "кто еще может более менее нормально работать в фоне" это медиапроигрователи, которые дублируют в нотифи кнопки управления.

В общем, я плюнул и свою службу печати теперь стал просто биндить из активити (тема диалог с запретом гасить экран)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xymirvse
@xymirvse
Обычный человек
И какой же код Свободы если у меня не работает Инстаграмм.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы