onLocationChanged is not called automatically
34,298
Problem seems to be solved. In onCreate, I added:
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE);
best = mgr.getBestProvider(crit, false);
mgr.requestLocationUpdates(best, 0, 1, locationListener);
onLocationChanged now looks like that:
@Override
public void onLocationChanged(Location location) {
i++;
nextPoint = overlay.getMyLocation();
latitude = nextPoint.getLatitudeE6();
longtitude = nextPoint.getLongitudeE6();
lastPoint = new GeoPoint((int) latitude, (int) longtitude);
Points.add(lastPoint);
MapOverlay mapOverlay = new MapOverlay(Points.get(i - 1), Points.get(i));
map.getOverlays().add(mapOverlay);
mMapController.animateTo(Points.get(i));
nextPoint = null;
lastPoint = null;
}
Also, very important methods:
@Override
protected void onResume() {
super.onResume();
mgr.requestLocationUpdates(best, 10000, 1, locationListener);
}
@Override
protected void onPause() {
super.onPause();
mgr.removeUpdates(locationListener);
}
And also some new permissions:
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
Author by
user1080051
Updated on May 10, 2020Comments
-
user1080051 almost 4 years
I have a problem with onLocationChanged event in Android. Here's the triggering:
case R.id.start: { Points.add(overlay.getMyLocation()); // Points' type is ArrayList<GeoPoint> mgr.requestLocationUpdates(best, 0, 3, locationListener); } break;
And here's the onLocationChanged method:
public void onLocationChanged(Location location) { i++; Points.add(overlay.getMyLocation()); MapOverlay mapOverlay = new MapOverlay(Points.get(i-1), Points.get(i)); map.getOverlays().add(mapOverlay); //does the drawing mMapController.animateTo(Points.get(i)); }
So, onLocationChanged is called only once and only after I press "start". It's supposed to be called automatically every time the location has changed, right? In my case, it's not.
Please help me. -
lomza about 12 years
ACCESS_COARSE_LOCATION
is not necessary if you useACCESS_FINE_LOCATION
. Just for you to know ;) -
gumuruh almost 10 years@lomza, what is the difference?
-
lomza almost 10 years@gumuruh, because
ACCESS_FINE_LOCATION
includes WiFi, cell and GPS location andACCESS_COARSE_LOCATION
includes just cell and WiFi. So the first permission basically includes the second one. -
gumuruh almost 10 years@lomza, that's good clarification. THanks for it. I just know it from you. :D
-
Ravi Vaniya almost 6 yearswhat is
best
,mgr
andlocationListener
? -
fklappan over 4 years@RaviVaniya
mgr
is the LocationManager which you can obtain usinglocationManager = (LocationManager) requireContext().getSystemService(Context.LOCATION_SERVICE);
-locationListener
is your implementation of the AndroidLocationListener
interface andbest
is aString
containing the name of the provider which best meets the criteria you passed.