Я разрабатываю приложение для 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();
}
Пользователи продолжает двигаться в направлении определенного места.
Что я хочу -, чтобы переместить соответствующие маркеры в новое место, когда пользователи перемещаются, чтобы каждый мог видеть, где каждый находится сейчас. Пожалуйста, помогите мне разобраться.
Что такое pMarker? это не переменная, которую вы назначаете маркеру только p? Кроме того, вы получаете какие-либо ошибки, или это просто не работает? – Epicality
Я бы предложил добавить маркеры на «hashmap» на основе «id» пользователей, а затем отредактировать сами маркеры, так как ваше приложение получает значения из Firebase, а не каждый раз создает новые. – Epicality
Вызовите 'acceptingUserReference.child (requestID)' всякий раз, когда 'onLocationChanged()' и обновите свое местоположение до 'FireBase' –