I'm trying to get the current location in android using LocationManager and LocationListener as described at http://developer.android.com/guide/topics/location/obtaining-user-location.html
However, onLocationChanged method of the LocationListener is never called. I've used a real android phone / also used the emulator and simulated location changed using telnet, as described in the link above.
Here's my code:
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* Use the LocationManager class to obtain GPS locations */
LocationManager mlocManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new CustomLocationListener(
getApplicationContext());
// Location Providers
String locationProvider = LocationManager.NETWORK_PROVIDER;
// LocationProvider locationProvider = LocationManager.GPS_PROVIDER;
mlocManager
.requestLocationUpdates(locationProvider, 0, 0, mlocListener);
}
}
and my LocationListener:
public class CustomLocationListener implements LocationListener {
private Context m_context;
public CustomLocationListener(Context context) {
m_context = context;
}
@Override
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
String Text = latitude + " " + longitude;
Toast.makeText(m_context, Text, Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider) {
// TODO
}
@Override
public void onProviderEnabled(String provider) {
// TODO
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
}
So onLocationChanged is never called. Can anyone see the problem?? Thanks a lot
You can also let your phone determine the best provider instead of just setting
String locationProvider = LocationManager.NETWORK_PROVIDER;
Try this instead:
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
String locationProvider = mlocManager.getBestProvider(criteria, true);
Also, have you tested by moving your device to a new location? Otherwise the "onlocationchanged" event may not fire. When I was figuring this stuff out a couple years ago, I put in some "toast" to alert me of my lat/long coordinates as I walked around the block to verify the event was firing.
This looks like Android Bug 57707 to me.
If it is, rebooting the device should help, at least for a while.
Or you could use the Google Play Services Location API.
By using both Wifi, GPS and Network positioning, the Google Play Services Location API will hide the fact that Network positioning is broken; that will only be obvious when you have neither GPS nor Wifi available.
Make sure that the proper location services are enabled in Settings. You can also use isProviderEnabled()
to check if the particular provider you've chosen will work. And ensure you have the COARSE or FINE location permissions in your manifest.
Also, make sure you're testing on a device. Network location does not work in the emulator at all, and GPS will only work if you use the simulation tool to inject new data points.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With