开发者

No GPS Update retrieved? Problem in Code?

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(savedInstanceSt开发者_高级运维ate);
    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


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.


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: D:/java-workspace/android-sdk-windows/docs/reference/android/location/LocationManager.html#getBestProvider(android.location.Criteria, boolean)
  4. Try it in the emulator (you have to send location update from DDMS (Emulator Control)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜