views:

188

answers:

2

Hello mates, I've got a serious problem with my GPS on my Nexus One: I wrote a kind of hello world with GPS, but the Toast that should be displayed isn't :(

I don't know what I'm doing wrong...maybe you could help me getting this work. Here's my code:

package gps.test;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class GPS extends Activity {
private LocationManager lm;
private LocationListener locationListener;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // ---use the LocationManager class to obtain GPS locations---
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    locationListener = new MyLocationListener();

    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 1,
            locationListener);
}

private class MyLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location loc) {
        if (loc != null) {
            Toast.makeText(
                    getBaseContext(),
                    "Location changed : Lat: " + loc.getLatitude()
                            + " Lng: " + loc.getLongitude(),
                    Toast.LENGTH_SHORT).show();
        }
    }

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

Theoretically there should be a new toast every 100 milliseconds, shouldn't it? Or at least, when I change my position by one meter!? I've no idea why it doesn't. I must admit I'm new to the topic, maybe I've missed something?

It would be great if you could give me a hint :)

nice greetings, poeschlorn

+1  A: 

Here are few steps I would follow:

  1. Check if you have enabled GPS location services.
  2. Check if you have GPS signal available (you can get some GPS monitor from market)
  3. You can change the code to use best possible provider: http://tinyurl.com/37gesn5
  4. Try it in the emulator (you have to send location update from DDMS (Emulator Control)
Michal Dymel
+2  A: 

The code looks correct to me. Do note that:

    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 1,
        locationListener);

This means that you will have to move the phone by more than a meter to get location updates and the check is done approximately every 0.1 second.

I would suggest you add logging statements in these functions:

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

This is so that you know what flow your code is taking. GPS could be disabled for e.g. and you'll not know within your app.

And finally, do remember to remove listening to locations in onPause (or when required). Having an app in the background that is continuously getting location updates when not required is a huge drain to the battery.

Prashast
Hi, thanks, you pointed my error source:I've changed the Time to 1000ms and the distance to 0, now it works visibly ;-)I think, it worked also before, but my mistake was to have the phone on the same position*shame on me* ;-)Thanks again :)
poeschlorn
cool. glad i could help you out :)
Prashast