here-api - HERE SDK TrafficUpdater.request(Geocordinate, TrafficUpdater.Listener) 不返回流量结果
问题描述
我一直在努力将几个 HERE 功能集成到我正在开发的应用程序中。现在我正在尝试将流量数据添加到应用程序中。默认的自动更新对我来说不够频繁(约 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 秒一次(远高于默认值),但我仍然没有收到任何信息。有谁知道这个问题的解决方案?我觉得好像我错过了一些简单的事情。
解决方案
流量源确实只在一分钟的时间范围内提供更新。强制应用程序以更高的频率请求此请求不会提供更新的数据。我建议保留默认的自动更新。
推荐阅读
- sql - SQL如何按顺序重新排列列(从大到小)
- amazon-web-services - AWS 无服务器 websocket
- google-apps-script - 使用 Google Apps 脚本基于电子表格自动填写 Google 表单
- javascript - 如何使用 javascript 编辑类的背景颜色 (rgba)?
- javascript - 如何在 JavaScript 中一次多次播放同一个音频文件
- matlab - 如何绘制具有特定 x 值的累积图?
- vue.js - Vue - 从 App.vue 中分离登录组件
- git - 如何在没有结帐的情况下在另一个分支中进行提交?
- mongodb - 在 Alpine 映像上安装 MongoDB 时出现问题
- css - 为 2 个不同的浏览器组合相同的 CSS 样式