Проблема с разрывом Gps в объединенном поставщике местоположения

#android #xamarin #gps #fusedlocationproviderapi

#Android #xamarin #gps #fusedlocationproviderapi

Вопрос:

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

Я использую API FusedLocationProviderClient со следующими параметрами:

 return new LocationRequest()
.SetInterval( 2000 )
.SetFastestInterval( 500 )
.SetSmallestDisplacement(1)
.SetPriority( LocationRequest.PriorityHighAccuracy );

  

Я использую гибридный сервис для отслеживания обновлений gps.
Когда я запускаю приложение, я привязан с помощью этого:

 
public PortalCorridaServiceConnection BindService() {

    if( ServiceConnection == null ) {

        ServiceConnection = new PortalCorridaServiceConnection( Activity );
Intent intentService = new Intent( Activity, typeof( PortalCorridaService ) );
         Activity.BindService( intentService, ServiceConnection, Bind.AutoCreate );

    }

    return ServiceConnection;

}

  

И когда нажата кнопка «Начать отслеживание», я запускаю свой сервис на переднем плане следующим образом

 public void StartForegroundService() {

    MakeToast( "Servico iniciado em foreground" );

    Intent intent = new Intent( Activity, typeof( Engine.PortalCorridaService ) );

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

}
  
 
public void RegisterForegroundService() {

    // Instantiate the builder and set notification elements:
    NotificationCompat.Builder builder = new NotificationCompat.Builder( this, "PORTALCORRIDA" )
        .SetContentTitle( "Portal da Corrida" )
        .SetContentText( "Estamos monitorando sua corrida" )
        .SetSmallIcon( Resource.Drawable.ic_media_play_light );

    // Build the notification:
    MainNotification = builder.Build();

    // Get the notification manager:
    NotificationManager notificationManager = GetSystemService( Context.NotificationService ) as NotificationManager;

    // Publish the notification:
    //const int notificationId = 0;
    //notificationManager.Notify( notificationId, notification );

    // Enlist this instance of the service as a foreground service
    StartForeground( SERVICE_RUNNING_NOTIFICATION_ID, MainNotification );

}
  

И затем я звоню

 fusedLocationProviderClient.RequestLocationUpdatesAsync( CreateLocationRequest(), locationCallback );
  

Ошибка разрыва GPS
прямая линия между стрелками — это разрыв.

Я также попробовал приложение на другом смартфоне с теми же результатами

Могу ли я что-нибудь сделать, чтобы улучшить обновления GPS?

Ответ №1:

Нет никаких гарантий, что у вас всегда будет прием GPS.

Отсутствие GPS может быть вызвано несколькими факторами, например, отсутствием надлежащего обзора для нескольких спутников, но это также может быть связано с тем, что ваш телефон пытается сэкономить заряд батареи, и ваша ОС решает отключить GPS. Точные правила отключения GPS не очень хорошо документированы как для iOS, так и для Android, но имеет смысл, что фоновые службы или приложения, которые не имеют фокуса, как правило, отключают GPS раньше.

Если (по какой-либо причине) GPS отсутствует, ваш телефон может прибегнуть к альтернативным методам, таким как триангуляция вышек сотовой связи GSM, или узнать местоположения Wi-Fi, если они находятся в поле зрения. Это намного экономичнее для батареи.

Но обратите внимание, что если ваше местоположение определяется вышками GSM, ваша точность сильно падает, и если используются близлежащие маршрутизаторы WiFi, диспетчер местоположений продолжает возвращать местоположение каждую секунду, но это будут одни и те же координаты каждый раз, когда что-то меняется (например, GPS возвращается или найден новый маршрутизатор WiFi).

В таких случаях вы также увидите, что вы испытываете.

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

Комментарии:

1. Спасибо за ответ. Я знаю, что ошибка заключается в том, что когда я начинаю отслеживать с помощью своего приложения и другого приложения, такого как run keeper и т.д., Другое приложение отслеживает без пробелов

2. @BrunoCerquiare: наиболее вероятная причина в том, что ваше приложение не находится на переднем плане, и ваша ОС решает, что это пустая трата батареи. Есть несколько способов обойти это. Вы могли бы, например, создать «службу переднего плана» для сбора данных GPS. Смотрите: developer.android.com/guide/components/services.html#Foreground .