2017-11-07 3 views
0

現在、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)方法で

答えて

0

、この行を追加します。COMENTため

Long then = sharedPreferences.getLong("time",0); 
long now = System.currentTimeMillis(); 
if (now - then > 3600000) { // 3600000 == 1 hour 
    // not adding the marker 
    return; 
} 
+0

ありがとう:アプリは、これを追加し再起動したときに、あなたのonMapReadyに続いて

sharedPreferences.edit().putLong("time",System.currentTimeMillis()).apply(); 

を。私はこれを試してみる。 –

関連する問題