Как запустить метод веб-сервиса в фоновом режиме из android формы xamarin - PullRequest
0 голосов
/ 03 марта 2020

Я хочу запустить этот метод UpdateStatus, когда он закрывает приложение

Это мой метод кодирования UpdateStatus в android:

String id = "";

var id = Application.Current.Properties["Id"].ToString();

User user = new User(id);
user.Id = id;
user.Datetime = time;

var responseStatus = await api.UpdateStatus(new UpdateStatusQuery(user));

Не могли бы вы мне помочь?

1 Ответ

0 голосов
/ 04 марта 2020

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

Если вы хотите чтобы запустить вышеуказанный код, когда приложение работает в фоновом режиме, вы можете использовать фоновую службу для достижения этого, из-за пределов фонового выполнения в Android 8.0 или позже , если вам требуется некоторое время для выполнения кода, и вы чтобы код работал стабильно, Foreground Services - хороший выбор.

В формах xamarin вы можете использовать зависимостьService в методе OnSleep App.xaml.cs

OnSleep - вызывается каждый раз, когда приложение переходит в фоновый режим.

Вы можете создать интерфейс.

IService.cs

public interface IService
{
    void Start();
}

Затем достигнуто DependentService для запуска службы Foreground.

[assembly: Xamarin.Forms.Dependency(typeof(DependentService))]
namespace TabGuesture.Droid
{
[Service]
public class DependentService : Service, IService
{
    public void Start()
    {
        var intent = new Intent(Android.App.Application.Context, 
 typeof(DependentService));


        if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
        {
            Android.App.Application.Context.StartForegroundService(intent);
        }
        else
        {
            Android.App.Application.Context.StartService(intent);
        }
    }

    public override IBinder OnBind(Intent intent)
    {
        return null;
    }
    public const int SERVICE_RUNNING_NOTIFICATION_ID = 10000;
    public override StartCommandResult OnStartCommand(Intent intent, 
    StartCommandFlags flags, int startId)
    {
        // From shared code or in your PCL

        CreateNotificationChannel();
        string messageBody = "service starting";

        var notification = new Notification.Builder(this, "10111")
        .SetContentTitle(Resources.GetString(Resource.String.app_name))
        .SetContentText(messageBody)
        .SetSmallIcon(Resource.Drawable.main)
        .SetOngoing(true)
        .Build();
        StartForeground(SERVICE_RUNNING_NOTIFICATION_ID, notification);
        //==============================do you work=====================

        String id = "";

        var id = Application.Current.Properties["Id"].ToString();
        User user = new User(id);
        user.Id = id;
        user.Datetime = time;
        var responseStatus = await api.UpdateStatus(new UpdateStatusQuery(user));

        return StartCommandResult.Sticky;
    }


    void CreateNotificationChannel()
    {
        if (Build.VERSION.SdkInt < BuildVersionCodes.O)
        {
            // Notification channels are new in API 26 (and not a part of the
            // support library). There is no need to create a notification
            // channel on older versions of Android.
            return;
        }

        var channelName = Resources.GetString(Resource.String.channel_name);
        var channelDescription = GetString(Resource.String.channel_description);
        var channel = new NotificationChannel("10111", channelName, NotificationImportance.Default)
        {
            Description = channelDescription
        };

        var notificationManager = (NotificationManager)GetSystemService(NotificationService);
        notificationManager.CreateNotificationChannel(channel);
    }
}
}

Вот аналогичная тема: Как создать службу, выполняющую работу в период времени в Xamarin.Forms?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...