Search code examples
androidgoogle-mapslocationlistener

Problem with locationListener


The application doesnt point to where I am at..here is what i have done:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mv=(MapView) findViewById (R.id.mapView);
    mv.setBuiltInZoomControls(true);
   // mv.setSatellite(true);
    mv.setStreetView(true);


lmanager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
    llistener=new MyLocationListener();
    lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, llistener);

}

private class MyLocationListener implements LocationListener
{

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        if(location!=null)
        {
            Toast.makeText(getBaseContext(),"Location changed: "+location.getLatitude()+" lang: "+ location.getLongitude() , Toast.LENGTH_SHORT).show(); // no toast is shown
        }
         p=new GeoPoint((int)(location.getLatitude()*1E6), (int)(location.getLongitude()*1E6));
        mapC.animateTo(p);
        mapC.setZoom(18);//no zooming happens
    }



@Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

To my manifest I added both of these:

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

Solution

  • first of all sorry for poor english. when the location was changed and you set the value into the map you need to invalidate the map using the invalidate() method of MapView class so you can get the updated value on the map

    mapC.animateTo(p);
    mapC.setZoom(18);
    mv.invalidate();
    

    as well as add after you set the value at initial time set into the map like

    mv.setBuiltInZoomControls(true);
    mv.setStreetView(true);
    mv.invalidate();