現在、Googleマップとマーカーを使用してAndroidスタジオアプリで作業しています。 このアプリのアイデアは、ユーザーが1時間ごとに1つのマーカーを置くことだけが許可されることができるため、ユーザーが1時間後にマーカーをマーカーに追加するとマーカーが消えるはずです。 ユーザーがアプリを閉じても、その時間内にそのマーカーを地図に残しておきたいです。私はそれを閉じると、マーカーがマップ内にとどまるので、私はこの問題を抱えています。 Sこれをどうすれば解決できますか?私はアプリを閉じると、postDelayedは停止しますか?私はrunnableとハンドラを正しい方法で使用していますか?一定時間が経過しても、またアプリケーションが終了しても、マーカーを削除するにはどうすればよいですか?
これは私のコードです:
@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 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;
}
これは私がアプリを再起動すると、マーカーを表示させるために使用するコードですか? 私はまた、ユーザーがマーカーを削除した場合、ハンドラはので、私はこの
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;
}
のようなものをやっていた実行を停止すべきだと思います。しかし、私はmarrkerを追加して、アプリを再起動するたびに、削除ボタンをタッチすると、私のアプリは動作を停止します。それはremoveCallbacksのためですが、私はこれを修正する方法はわかりません。 drawMarker(View view)
方法で
ありがとう:アプリは、これを追加し再起動したときに、あなたの
onMapReady
に続いてを。私はこれを試してみる。 –