Как остановить обработчик, когда getaccuracy () ниже 100
Привет, я создаю приложение для Android map, которое будет получать местоположение пользователя, но когда пользователи открывают свою карту, иногда местоположение не является точным и будет медленно определять ваше местоположение.
Я добавил обработчик, который будет запускаться каждые 5 секунд, проверяя местоположение пользователей, и когда данные getAccuracy будут равны или меньше 100, он остановится. Как бы я это сделал?
Что я уже пробовал:
Я уже пробовал. Но он все равно вызывает обработчика, и тосты не прекращаются.
<pre>private LocationManager locationManager; private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps_page); locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, new LocationListener() { @Override public void onLocationChanged(Location location) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { handler.postDelayed(runnable,3000); } @Override public void onProviderDisabled(String provider) { handler.removeCallbacks(runnable); } }); private Runnable runnable = new Runnable() { @Override public void run() { getCurrentLocation(); Toast.makeText(mapsPage.this, "GETTING LOCATION", Toast.LENGTH_SHORT).show(); handler.postDelayed(this, 3000); } }; private void getCurrentLocation() { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); if (location != null) { longitude = location.getLongitude(); latitude = location.getLatitude(); moveMap(); Integer loc = Math.round(location.getAccuracy()); textings.setText(Integer.toString(loc)); if(loc <= 100) { handler.removeCallbacks(runnable); Toast.makeText(mapsPage.this, "HANDLER STOPPED", Toast.LENGTH_SHORT).show(); } } } //Function to move the map private void moveMap() { LatLng latLng = new LatLng(latitude, longitude); mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); mMap.animateCamera(CameraUpdateFactory.zoomTo(17)); mMap.addMarker(new MarkerOptions().position(latLng).draggable(false)); }