我有一个广播,可以发送用户的LatLng信息。在另一个活动中,我有一个广播接收器,应该接收此LatLng信息并将其显示为热图。热图工作正常,但我认为广播未发送或未接收,无法确切地找出问题所在。也许我设置不正确?我想要实现的是在地图上显示我的应用程序的所有用户作为热点图。也许这是完全错误的方法?
发件人:
private void broadcastUserData(String userId, Double longitude, Double latitude) {
Intent intent = new Intent();
intent.putExtra("VRUId", userId);
intent.putExtra("longitude", longitude);
intent.putExtra("latitude", latitude);
intent.setAction("VRUData");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
接收器:
final Map<String, LatLng> map = new HashMap<>();
private void createBroadcastReceiverVRUData() {
// just for testing
map.put("!2321", new LatLng(7.447893883296565, 9.48882099800934));
map.put("!2321", new LatLng(7.44789382565, 9.4888204));
map.put("!2231", new LatLng(7.447780625, 9.489011));
initializeHeatMap(map);
broadcastReceiverVRUData = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String userId = intent.getStringExtra("VRUId");
LatLng gps = new LatLng(
intent.getDoubleExtra("latitude", 0),
intent.getDoubleExtra("longitude", 0));
if (map.containsKey(userId)) {
map.remove(userId);
map.put(userId, gps);
} else {
map.put(userId, gps);
}
initializeHeatMap(map);
Log.d("THIS IS GPS", gps.toString());
}
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("VRUData");
LocalBroadcastManager.getInstance(this).registerReceiver(
broadcastReceiverVRUData, intentFilter);
}
热图:
List<LatLng> list;
private void initializeHeatMap(Map<String, LatLng> map) {
list = new ArrayList<LatLng>(map.values());
Log.d("GPS coordinates", map.values().toString());
HeatmapTileProvider mProvider = new HeatmapTileProvider.Builder().data(list).build();
mMap.addTileOverlay((new TileOverlayOptions()).tileProvider(mProvider));
}
答案 0 :(得分:1)
intent.setAction("VRUData")
是不相同的intentFilter.addAction("VRUDATA")
-大写字母都是大写。
答案 1 :(得分:0)
首先尝试:您可以尝试gmap.clear();在地图上添加标记之前,可能是旧标记无法替换为新标记的问题。
尝试第二件事:
您的接收器在您的活动中或使用的任何地方都看起来像这样。
private BroadcastReceiver receiver;
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// put your stuuf here
Bundle extras = intent.getExtras();
HashMap<String, String> mData;
}
}: