目前,我正在使用谷歌地图和标记在Android工作室应用程序中工作。 这个应用程序的想法是,用户只能被允许每一小时放一个标记,因此如果用户在一小时后向地图添加标记,标记应该消失。 问题是,即使用户关闭应用程序,我希望该标记在该小时内保留在地图中。我遇到问题,因为如果关闭它,标记将永远留在地图中。我怎么解决这个问题?当我关闭应用程序时,postDelayed会停止吗?我是否以正确的方式使用runnable和handler?
这是我的代码:
public void drawMarker(View view) {
if (marker == null) {
Location loc = returnLocation();
Double lat = loc.getLatitude();
Double lon = loc.getLongitude();
//para guardar un marker en sharedPreferences
sharedPreferences.edit().putString("Lat",String.valueOf(lat)).apply();
sharedPreferences.edit().putString("Lng",String.valueOf(lon)).apply();
marker = addMarker(loc);
dialogPlayas.dismiss();
removeMarker.setVisibility(View.VISIBLE);
markerHandler = new Handler();
markerHandler.postDelayed(timeRemoveMarker, 10000); //van a durar ua hora osea 3600000 milisegundos
}
}
private Runnable timeRemoveMarker = new Runnable() {
@Override
public void run() {
marker.remove();
removeMarker.setVisibility(View.GONE);
sharedPreferences.edit().remove("Lat").apply();
sharedPreferences.edit().remove("Lng").apply();
marker = null;
}
};
public void removeMarkerButton(View view) {
if (marker != null) {
marker.remove();
sharedPreferences.edit().remove("Lat").apply();
sharedPreferences.edit().remove("Lng").apply();
removeMarker.setVisibility(View.GONE);
//markerHandler.removeCallbacks(timeRemoveMarker);
}
marker = null;
}
这是我用来在重新启动应用时显示标记的代码:
@Override
public void onMapReady(final GoogleMap googleMap) {
mMap = googleMap;
goToLocation();
mMap.getUiSettings().setMapToolbarEnabled(false);
sharedPreferences = this.getSharedPreferences("LatLng",MODE_PRIVATE);
//Check whether your preferences contains any values then we get those values
if((sharedPreferences.contains("Lat")) && (sharedPreferences.contains("Lng")))
{
Location loc = new Location("");
String lat = sharedPreferences.getString("Lat","");
String lng = sharedPreferences.getString("Lng","");
LatLng position =new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));
Double latitude = Double.parseDouble(lat);
Double longitude = Double.parseDouble(lng);
loc.setLatitude(latitude);
loc.setLongitude(longitude);
addMarker(loc);
removeMarker.setVisibility(View.VISIBLE);
//mMap.setInfoWindowAdapter(new windowInfo(MapsActivity.this));
}
}
有什么想法来解决这个问题? 我还认为,如果用户删除了一个标记,那么处理程序应该停止运行,所以我正在做这样的事情
public void removeMarkerButton(View view) {
if (marker != null) {
marker.remove();
sharedPreferences.edit().remove("Lat").apply();
sharedPreferences.edit().remove("Lng").apply();
removeMarker.setVisibility(View.GONE);
markerHandler.removeCallbacks(timeRemoveMarker);
}
marker = null;
}
但每当我添加一个游泳者并重启应用程序时,触摸删除按钮会使我的应用停止工作。那是因为removeCallbacks,但我不知道如何解决这个问题。
答案 0 :(得分:0)
在drawMarker(View view)
方法中,添加以下行:
sharedPreferences.edit().putLong("time",System.currentTimeMillis()).apply();
然后在onMapReady
重新启动应用时,添加以下内容:
Long then = sharedPreferences.getLong("time",0);
long now = System.currentTimeMillis();
if (now - then > 3600000) { // 3600000 == 1 hour
// not adding the marker
return;
}