我正在开发一个Android应用程序,其中一些用户从他们的设备打开相同的活动。此活动中有一张地图,当用户从其设备中打开此活动时,会从Firebase获取其位置坐标,并在地图上显示基于这些坐标的标记。
这是我的代码:
acceptingUserReference.child(requestID).child(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
final Map<String, String> newAcceptedUser = (Map<String, String>) dataSnapshot.getValue();
nameOfP.add(newAcceptedUser.get("pName"));
cLatP.add(newAcceptedUser.get("currentLat").trim());
cLngP.add(newAcceptedUser.get("currentLng").trim());
addMarkers();
//Check map is loaded
mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.getUiSettings().setMapToolbarEnabled(true);
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
mMap.setMaxZoomPreference(19.0f); mMap.setMyLocationEnabled(true);
}
});
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这是addMarkers()
方法:
public void addMarkers() {
mMap.clear();
venueMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(venueLat), Double.parseDouble(venueLng)));
markersList.add(venueMarker);
for (int i = 0; i < nameOfP.size(); i++) {
p = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.valueOf(cLatP.get(i)), Double.valueOf(cLngP.get(i)))).title(nameOfP.get(i).trim()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
markersList.add(pMarker);
}
}
这是onLocationChanged()
:
@Override
public void onLocationChanged(Location location) {
mCurrentLocation = location;
currentLtAU = mCurrentLocation.getLatitude();
currentLnAU = mCurrentLocation.getLongitude();
}
用户不断前往特定位置。
我想要的是在用户移动时将相应的标记移动到新位置,以便每个人都可以看到每个人当前所在的位置。请帮我搞清楚。
答案 0 :(得分:0)
保存addMarker的结果,然后调用setPosition(addMarker的结果)。
答案 1 :(得分:0)
您的代码似乎没有任何问题。对不起,我找不到它有什么问题,但是这里有一个文件可以作为指导来找到问题:
我希望你尽快解决问题! (为凌乱的代码道歉,它已经很老了)
答案 2 :(得分:0)
1。每当调用onLocationChanged
表示用户移动到某个距离时。
更新用户在Firebase
onLocationChanged
的更新位置,以便其他用户可以找到您更新的位置。
@Override
public void onLocationChanged(Location location) {
mCurrentLocation = location;
currentLtAU = mCurrentLocation.getLatitude();
currentLnAU = mCurrentLocation.getLongitude();
}
2。在您成功将用户位置更新为acceptingUserReference.child(requestID)
时调用Firebase
代码