MapBox: инициализация LocationEngineCallback в службе переднего плана - PullRequest
0 голосов
/ 06 мая 2020

Идея в том, что я хочу отслеживать местоположение пользователя каждые 10 секунд при запросе новых обновлений местоположения. Для этой цели у меня есть служба переднего плана,

public class LocationService extends Service{
 ...
}

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

private final WeakReference<LocationChangeListeningActivity> activityWeakReference;

LocationChangeListeningActivityLocationCallback(LocationChangeListeningActivity activity) {
    this.activityWeakReference = new WeakReference<>(activity);
}

Мой вопрос: как мы можем обеспечить обратный вызов в этом случае?

1 Ответ

0 голосов
/ 08 мая 2020

Решил (не уверен, что это наиболее эффективный способ, но если найду другой, сообщение будет обновлено). Класс, который расширяет класс Service, должен просто реализовать LocationEngineCallback<LocationEngineRequest> следующим образом:

public class LocationService extends Service implements LocationEngineCallback<LocationEngineResult>{
...
}

После этого мы просто устанавливаем запрос местоположения и получение lastLocation для текущего экземпляра ( this):

locationEngine.requestLocationUpdates(request, this, getMainLooper());
locationEngine.getLastLocation(this);   

И в переопределенных методах объявите внутренний лог c:

@Override
public void onSuccess(LocationEngineResult result) {
    //Handle Success
}

@Override
public void onFailure(@NonNull Exception exception) {
    //Handle Failure
}

Конечно, не забудьте остановить обновления и удалить LocationEngine после остановки услуги:

@Override
public void onDestroy() {
    super.onDestroy();
    locationEngine.removeLocationUpdates(this);
    locationEngine = null;
}
...