我在地图上放了一些标记。随着标记的位置发生变化,它会在地图上放置另一个标记,但保留最后一个标记,因为它会在地图上创建多个具有相同ID的标记。
我有办法将上一个标记清除为位置更新。
我正在从任何数组中的firebase数据库中检索位置更改。
这是我的代码:
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.telephony.SmsManager;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.Map;
public class MapsActivity extends MainActivity implements OnMapReadyCallback {
// flag for Internet connection status
Boolean isInternetPresent = false;
// Connection detector class
ConnectionDetector cd;
// Alert Dialog Manager
AlertDialogManager alert = new AlertDialogManager();
// GPS Location
GPSTracker gps;
Handler handler = new Handler();
Runnable refresh;
final int[] count = {0};
final ArrayList<String> locationData = new ArrayList<>();
final ArrayList<String> DriverInfo = new ArrayList<>();
public GoogleMap mMap;
public Marker marker;
MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.profile) {
finish();
startActivity(new Intent(MapsActivity.this, ProfileActivity.class));
} else if (id == R.id.nearby) {
finish();
startActivity(new Intent(MapsActivity.this, NearbyActivity.class));
} else if (id == R.id.notification) {
finish();
startActivity(new Intent(MapsActivity.this, NotificationActivity.class));
} else if (id == R.id.setting) {
finish();
startActivity(new Intent(MapsActivity.this, SettingsActivity.class));
} else if (id == R.id.faq) {
finish();
startActivity(new Intent(MapsActivity.this, FaqActivity.class));
} else if (id == R.id.emergecy_contact) {
finish();
startActivity(new Intent(MapsActivity.this, EmergencyContactActivity.class));
} else if (id == R.id.support) {
finish();
startActivity(new Intent(MapsActivity.this, SupportActivity.class));
} else if (id == R.id.help) {
finish();
startActivity(new Intent(MapsActivity.this, HelpActivity.class));
} else if (id == R.id.about_us) {
finish();
startActivity(new Intent(MapsActivity.this, AboutUsActivity.class));
} else if (id == R.id.rate) {
finish();
startActivity(new Intent(MapsActivity.this, RateUsActivity.class));
} else if (id == R.id.share) {
finish();
startActivity(new Intent(MapsActivity.this, ShareActivity.class));
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
});
mediaPlayer = MediaPlayer.create(this, R.raw.demonstrative);
cd = new ConnectionDetector(getApplicationContext());
// Check if Internet present
isInternetPresent = cd.isConnectingToInternet();
if (!isInternetPresent) {
// Internet Connection is not present
alert.showAlertDialog(MapsActivity.this, "Internet Connection Error",
"Please connect to working Internet connection", false);
// stop executing code by return
return;
}
// creating GPS Class object
gps = new GPSTracker(this);
// check if GPS location can get
if (gps.canGetLocation()) {
Log.d("Your Location", "latitude:" + gps.getLatitude() + ", longitude: " + gps.getLongitude());
} else {
// Can't get user's current location
alert.showAlertDialog(MapsActivity.this, "GPS Status",
"Couldn't get location information. Please enable GPS",
false);
// stop executing code by return
return;
}
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
//Retrive data from firebase
final FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference myRef = database.getReference().child("users");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
collectLocation((Map<String, Object>) dataSnapshot.getValue());
collectdriverInfo((Map<String, Object>) dataSnapshot.getValue());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
//Retrieve location from database
public void collectLocation(Map<String, Object> users) {
for (Map.Entry<String, Object> entry : users.entrySet()) {
//Get user map
Map singleUser = (Map) entry.getValue();
//Get phone field and append to list
locationData.add((String) singleUser.get("location"));
count[0]++;
}
System.out.println("Location: " + locationData.toString());
System.out.println("My count is: " + count[0]);
}
//Retrive driver info from database
public void collectdriverInfo(Map<String, Object> users) {
final String[] userName = new String[count[0]];
final String[] userContact = new String[count[0]];
final double[] latitude = new double[count[0]];
final double[] longitude = new double[count[0]];
for (Map.Entry<String, Object> entry : users.entrySet()) {
//Get user map
Map singleUser = (Map) entry.getValue();
//Get phone field and append to list
DriverInfo.add((String) singleUser.get("driverInfo"));
}
System.out.println("Driver Information: " + DriverInfo.toString());
//Convert location string to double
int j = 0;
for (String loc : locationData) {
System.out.println("LocationMMdm" + loc);
String[] Location = loc.split(",");
latitude[j] = Double.parseDouble(Location[0]);
longitude[j] = Double.parseDouble(Location[1]);
System.out.println("lat: " + latitude[0] + " " + "log: " + longitude[0]);
j++;
}
//Split driver info and add marker on map
int i = 0;
for (String data : DriverInfo) {
System.out.println("datainfo " + data);
String[] singleEntry = data.split(",");
userName[i] = singleEntry[0];
userContact[i] = singleEntry[1];
mMap.addMarker(new MarkerOptions().position(new LatLng(latitude[i], longitude[i])).
title(userName[i]).
snippet(userContact[i]).
flat(true).
alpha(0.9f).
anchor(0.5f, 0.5f).
rotation((0.0f)).
icon(BitmapDescriptorFactory.fromResource(R.drawable.markeramb)));
i++;
}
mMap.setOnInfoWindowLongClickListener(new GoogleMap.OnInfoWindowLongClickListener() {
@Override
public void onInfoWindowLongClick(Marker marker) {
String phoneno = marker.getSnippet();
double myLat = gps.getLatitude();
double myLog = gps.getLongitude();
String title = marker.getTitle();
String msg = myLat + ", " + myLog;
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneno, null, msg, null, null);
View view = findViewById(android.R.id.content);
Snackbar.make(view, "Message Sent", Snackbar.LENGTH_LONG).show();
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
//Call to the ambulance driver
mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
try {
String uri = "tel:" + marker.getSnippet();
if (marker.getSnippet() == null) {
alert.showAlertDialog(MapsActivity.this, "Not Present",
"Contact no. not available", false);
} else {
finish();
Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse(uri));
startActivity(callIntent);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
System.out.println("Users name are: " + userName.toString());
System.out.println("Users count is: " + userContact.toString());
System.out.println("Count is:" + count[0]);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setMyLocationEnabled(true);
double myLatitude = gps.getLatitude();
double myLongitude = gps.getLongitude();
LatLng latLng = new LatLng(myLatitude, myLongitude);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
finish();
startActivity(new Intent(MapsActivity.this, MainActivity.class));
}
}
}
答案 0 :(得分:0)
以下内容可帮助您删除标记 p>
if (destnationMarker != null) {
destnationMarker.remove();
mMap.clear();
destnationMarker = null;
}