Проблема с пропуском в gps провайдере - PullRequest
0 голосов
/ 23 марта 2019

Я занимаюсь разработкой приложения для мониторинга 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 Gap прямая линия между стрелками - это пробел.

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

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

1 Ответ

1 голос
/ 23 марта 2019

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

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

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

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

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

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

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