Я работал над интеграцией нескольких функций ЗДЕСЬ в приложение, над которым я работаю.Прямо сейчас я пытаюсь добавить данные трафика в приложение.Автообновления по умолчанию не достаточно часты для меня (~ 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 секунды (намного выше значения по умолчанию), и все равно ничего не получаю.Кто-нибудь знает решение этой проблемы?Я чувствую, как будто это что-то простое, что я скучаю.Обновления из Менеджера позиционирования проходят очень хорошо, и приложение без проблем общается с нашим сервером, поэтому я не думаю, что это проблема с подключением.
Заранее спасибо!Я очень ценю любые советы или решения, которые могут быть у каждого!