Xamarin Forms ios - Continuous task to work for hours even app in the background

My requirement is to send the location of the device to the rest api continuously for every 30 seconds.
I have used UIApplication.SharedApplication.BeginBackgroundTask to make it work even the app went to the background, but IOS is suspending the app after 3 minutes.
Is it possible to continuously allow the app to work in the background for hours?

Best Answer

  • edited February 6 Accepted Answer

    This below code is working fine for my requirement.

    Send the function you want to execute to this method as action and it will run continuously.
    Insert a delay at the end of the function to make it run in the time intervals you want.

    private static nint interger = -1;
            public async Task RunCodeInBackground(Func<Task> action, string name = "MyBackgroundTaskName")
            {
                CancellationTokenSource cxl = new CancellationTokenSource();
                nint newtaskId = UIApplication.SharedApplication.BeginBackgroundTask("Long-Running Task", () =>
                {
                    nint insideTask = interger;
                    if (insideTask != -1 && UIApplication.SharedApplication.BackgroundTimeRemaining < 30)
                    {
                        UIApplication.SharedApplication.EndBackgroundTask(insideTask);
                        insideTask = UIApplication.BackgroundTaskInvalid;
                    }
    
                });
                interger = newtaskId;
                try
                {
                    await Task.Run(async () =>
                    {
                        await action();
                    }, cxl.Token);
    
                } 
                catch (Exception)
                { 
                }
                    await RunCodeInBackground(action);            
    
                UIApplication.SharedApplication.EndBackgroundTask(newtaskId);
            }
    

Answers

Sign In or Register to comment.