Сейчас я тестирую ее на 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);
}
}
Код: Выделить всё
[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();
}
}
Код: Выделить всё
У кого-нибудь когда-нибудь была такая проблема?
Спасибо тем, кто мне поможет.
Подробнее здесь: https://stackoverflow.com/questions/680 ... er-a-while