Фоновые услуги в Xamarin. Android - PullRequest
1 голос
/ 21 января 2020

Я изо всех сил пытаюсь создать фоновый сервис, используя Xamarin. Android. Фоновая служба должна работать каждые 5 минут, а также должна работать, когда экран телефона выключен или приложение закрыто. Есть ли у вас идеи, как этого добиться? Я обнаружил, что библиотека работает нормально, но проблема в том, что интервал не работает меньше 15 минут. Я не знаю почему.

https://www.c-sharpcorner.com/article/scheduling-work-with-workmanager-in-android/

Я с нетерпением жду вашей поддержки. Спасибо.

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Я думаю BroadcastReceiver будет более подходящим для вашей задачи. Это обеспечивает большую гибкость и настройку параметров.

Объявление приемника вещания:

using Android.Content;

[BroadcastReceiver]
public class BackgroundBroadcastReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        // Your code here that will be executed periodically
    }
}

Регистрация приемника вещания:

// context - any of your Android activity

var intentAlarm = new Intent(context, typeof(BackgroundBroadcastReceiver));
var alarmManager = (AlarmManager)context.GetSystemService(Context.AlarmService);

alarmManager.SetRepeating(AlarmType.ElapsedRealtime, // Works even application\phone screen goes off
                          DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), // When to start (right now here)
                          1000, // Receiving interval. Set your value here in milliseconds.
                          PendingIntent.GetBroadcast(context, 1, intentAlarm, PendingIntentFlags.UpdateCurrent));
0 голосов
/ 30 января 2020

вы можете использовать сервис, как показано ниже

using System;
using System;
using System.Threading;
using Android.App;
using Android.Content;
using Android.OS;
using OomaAndroid.Models;
using SQLite;

namespace OomaAndroid
{
    [Service]
    public class ServiceTest : Service
    {
        Timer timer;        
        public override void OnCreate()
        {
            base.OnCreate();
        }
        public override IBinder OnBind(Intent intent)
        {            
            return null;
        }


        public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
        {            
            timer = new Timer(HandleTimerCallback, 0, 0, 900000);
            return base.OnStartCommand(intent, flags, startId);
        }

        private void HandleTimerCallback(object state)
        {
            //this part codes will run every 15 minutes
        }
    }    
}

, также вы можете запустить сервис в MainActivity

      Intent intSer = new Intent(base.ApplicationContext, typeof(OomaService));
      StartService(intSer);

, также вы должны получить разрешение Receive_Boot_Compeleted от пользователя на запуск сервиса после перезапуска мобильного телефона.

...