【问题标题】:How can I remove a marker after a certain amount of time and even if the app is closed?即使应用程序关闭,如何在一定时间后删除标记?
【发布时间】:2017-11-07 18:36:31
【问题描述】:

目前我正在使用谷歌地图和标记在 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 但我不知道如何解决这个问题。

【问题讨论】:

    标签: android google-maps maps


    【解决方案1】:

    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;
    }
    

    【讨论】:

    • 感谢您的评论。我会试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多