ЗДЕСЬ SDK TrafficUpdater.request (Geocordinate, TrafficUpdater.Listener) не возвращает результаты трафика - PullRequest
0 голосов
/ 11 сентября 2018

Я работал над интеграцией нескольких функций ЗДЕСЬ в приложение, над которым я работаю.Прямо сейчас я пытаюсь добавить данные трафика в приложение.Автообновления по умолчанию не достаточно часты для меня (~ 1 мин), поэтому я пытаюсь использовать TrafficUpdater.request (GeoCoordinate, TrafficUpdater.Listener), чтобы вручную получать информацию о трафике каждые 5 секунд или около того.Проблема в том, что, хотя строка запроса выполняется, слушатель никогда не вызывается, и я никогда не получаю никаких обновлений трафика.Ниже моя деятельность:

import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.here.android.mpa.common.GeoCoordinate;
import com.here.android.mpa.common.GeoPosition;
import com.here.android.mpa.common.MapSettings;
import com.here.android.mpa.common.OnEngineInitListener;
import com.here.android.mpa.common.PositioningManager;
import com.here.android.mpa.guidance.TrafficUpdater;
import com.here.android.mpa.mapping.Map;
import com.here.android.mpa.mapping.MapFragment;
import com.here.android.mpa.mapping.MapTrafficLayer;
import com.here.android.mpa.mapping.MapView;
import com.here.android.mpa.mapping.TrafficEvent;

import java.io.File;
import java.lang.ref.WeakReference;

public class MainActivity extends AppCompatActivity {

    private Map map;
    private MapFragment mapFragment;
    private TrafficUpdater trafficUpdater;

    private PositioningManager.OnPositionChangedListener onPositionChangedListener = new PositioningManager.OnPositionChangedListener() {
        @Override
        public void onPositionUpdated(PositioningManager.LocationMethod locationMethod, GeoPosition geoPosition, boolean b) {
            onLocationUpdate(geoPosition);
        }

        @Override
        public void onPositionFixChanged(PositioningManager.LocationMethod locationMethod, PositioningManager.LocationStatus locationStatus) {

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MapSettings.setIsolatedDiskCacheRootPath(
                getApplicationContext().getExternalFilesDir(null) + File.separator + ".here-maps",
                "MAP_SERVICE");
        mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
        mapFragment.init(new OnEngineInitListener() {
            @Override
            public void onEngineInitializationCompleted(Error error) {
                if (error == Error.NONE) {
                    map = mapFragment.getMap();
                    initTracker();
                }
            }
        });

    }
        private void initTracker() {
        trafficUpdater = TrafficUpdater.getInstance();
        trafficUpdater.enableUpdate(false);
        PositioningManager positioningManager = PositioningManager.getInstance();
        positioningManager.addListener(new WeakReference<PositioningManager.OnPositionChangedListener>(onPositionChangedListener));
        mapFragment.getPositionIndicator().setVisible(true);
        positioningManager.start(PositioningManager.LocationMethod.GPS_NETWORK);

    }

    private boolean isTimerRunning = false;
    CountDownTimer trafficTimer = new CountDownTimer(5000,5000) {
        @Override
        public void onTick(long millisUntilFinished) {

        }

        @Override
        public void onFinish() {
            isTimerRunning = false;
            getTrafficInfo();
        }
    };

    private GeoPosition lastGeoPosition;

    private void onLocationUpdate(GeoPosition geoPosition) {
        map.setCenter(geoPosition.getCoordinate(), Map.Animation.NONE);
        Log.i("____MAINACTIVITY", "location update");
        lastGeoPosition = geoPosition;
        if(!isTimerRunning) {
            trafficTimer.cancel();
            trafficTimer.start();
            isTimerRunning = true;
        }

    }

    private TrafficUpdater.Listener trafficListener = new TrafficUpdater.Listener() {
        @Override
        public void onStatusChanged(TrafficUpdater.RequestState requestState) {
            Log.i("____MAINACTIVITY", requestState.name());
        }
    };

    private void getTrafficInfo() {
        if(lastGeoPosition != null) {
            TrafficUpdater.RequestInfo requestInfo = trafficUpdater.request(lastGeoPosition.getCoordinate(), trafficListener);
            Log.i("___MAINACTIVITY", requestInfo.getError().name());
        }
    }
}

Я пытался решить эту проблему несколькими способами.Во-первых, я проверил все свои разрешения приложений и панель инструментов проекта на портале для разработчиков, чтобы убедиться, что все настроено правильно, и это так.Я предоставлял слушателя как анонимный метод в строке, в которой мы выполняем запрос, и это не сработало.Я переместил слушателя в качестве закрытой переменной-члена действия и предоставил его таким образом, но он все еще не работает.Я проверил RequestInfo, возвращенный методом, и он всегда указывает код ошибки NONE, поэтому кажется, что никаких ошибок не происходит.Наконец, я устанавливаю частоту обновления каждые 1,5 секунды (намного выше значения по умолчанию), и все равно ничего не получаю.Кто-нибудь знает решение этой проблемы?Я чувствую, как будто это что-то простое, что я скучаю.Обновления из Менеджера позиционирования проходят очень хорошо, и приложение без проблем общается с нашим сервером, поэтому я не думаю, что это проблема с подключением.

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

1 Ответ

0 голосов
/ 17 сентября 2018

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

...