Приложение GPS-слежения в Xamarin через некоторое время перестает работать в фоновом режимеC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Приложение GPS-слежения в Xamarin через некоторое время перестает работать в фоновом режиме

Сообщение Anonymous »

Я пытаюсь создать приложение GPS-слежения в Xamarin, которое также работает в фоновом режиме. В настоящее время я создал службу, которая каждые две секунды проверяет местоположение устройства.
Сейчас я тестирую ее на Android Honor 10 и замечаю, что когда я запускаю приложение в режиме отладки с помощью Visual Studio, поддерживая телефон подключенным к ПК, оно работает без остановки.
С другой стороны, если я попробую приложение без отладки, через некоторое время оно перестает отслеживать GPS, если я перевожу его в фоновый режим.
Итак, это мой сервис в основном проекте< /strong>:

Код: Выделить всё

public class TrackingService
{
readonly bool stopping = false;
public TrackingService()
{
}

public async Task Run(CancellationToken token)
{
await Task.Run(async () => {
while (!stopping)
{
token.ThrowIfCancellationRequested();
try
{
await Task.Delay(2000);

var request = new GeolocationRequest(GeolocationAccuracy.Best);
var location = await Geolocation.GetLocationAsync(request);
//Other stuff like writing coordinates into a local database
}
catch (Exception ex)
{
Device.BeginInvokeOnMainThread(() =>
{
//Error
});
}
}
return;
}, token);
}
}
Это начало службы для проекта Android[/b]:

Код: Выделить всё

[Register("com.companyname.dolomicchiostreetapp.TrackingService")]
public class AndroidLocationService : Service
{
CancellationTokenSource _cts;
public const int SERVICE_RUNNING_NOTIFICATION_ID = 10000;

public override IBinder OnBind(Intent intent)
{
return null;
}

public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
_cts = new CancellationTokenSource();

Notification notif = DependencyService.Get().ReturnNotif();
StartForeground(SERVICE_RUNNING_NOTIFICATION_ID, notif);

Task.Run(() => {
try
{
var locShared = new TrackingService();
locShared.Run(_cts.Token).Wait();
}
catch (OperationCanceledException)
{
}
finally
{
if (_cts.IsCancellationRequested)
{
var message = new StopServiceMessage();
Device.BeginInvokeOnMainThread(
() => MessagingCenter.Send(message, "ServiceStopped")
);
}
}
}, _cts.Token);

return StartCommandResult.Sticky;
}

public override void OnDestroy()
{
if (_cts != null)
{
_cts.Token.ThrowIfCancellationRequested();
_cts.Cancel();
}
base.OnDestroy();
}
}
А это мой AndroidManifest.xml Я следовал этому примеру GitHub: XamarinForms.LocationService
У кого-нибудь когда-нибудь была такая проблема?
Спасибо тем, кто мне поможет.

Подробнее здесь: https://stackoverflow.com/questions/680 ... er-a-while
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»