Странная проблема в поиске GPS - PullRequest
0 голосов
/ 12 августа 2011

Привет всем, я хочу найти текущее местоположение GPS, я использовал следующий код.

public class GPSManager
{
    private static final int gpsMinTime = 500;
    private static final int gpsMinDistance = 0;

    private LocationManager locationManager = null;
    private LocationListener locationListener = null;
    private GPSCallback gpsCallback = null;

    public GPSManager()
    {
        locationListener = new LocationListener()
        {
            public void onProviderDisabled(final String provider)
            {
            }

            public void onProviderEnabled(final String provider)
            {
            }

            public void onStatusChanged(final String provider, final int status, final Bundle extras)
            {
            }

            public void onLocationChanged(final Location location)
            {
                location.getLatitude();
                location.getLongitude();

                if (location != null && gpsCallback != null)
                {
                    Log.e("if location "+location,"if gpscallback"+gpsCallback);
                    gpsCallback.onGPSUpdate(location);
                    location.getLatitude();
                    location.getLongitude();
                }
                else{
                    Log.e("else location "+location,"else gpscallback"+gpsCallback);
                }
            }
        };
    }

    public void startListening(final Activity activity)
    {
        if (locationManager == null)
        {
            locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);
        }

        final Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);

        final String bestProvider = locationManager.getBestProvider(criteria, true);

        if (bestProvider != null && bestProvider.length() > 0)
        {
            locationManager.requestLocationUpdates(bestProvider, GPSManager.gpsMinTime,
                    GPSManager.gpsMinDistance, locationListener);
        }
        else
        {
            final List<String> providers = locationManager.getProviders(true);

            for (final String provider : providers)
            {
                locationManager.requestLocationUpdates(provider, GPSManager.gpsMinTime,
                        GPSManager.gpsMinDistance, locationListener);
            }
        }
    }

    public void stopListening()
    {
        try
        {
            if (locationManager != null && locationListener != null)
            {
                locationManager.removeUpdates(locationListener);
            }

            locationManager = null;
        }
        catch (final Exception ex)
        {

        }
    }

    public void setGPSCallback(final GPSCallback gpsCallback)
    {
        this.gpsCallback = gpsCallback;
    }

    public GPSCallback getGPSCallback()
    {
        return gpsCallback;
    }

Но странная проблема в том, что он работает только тогда, когда GPS в мобильном телефоне выключен. Если GPS на устройстве включен, он не работает.

Может кто-нибудь сказать, в чем проблема с моим кодом?

Пожалуйста, помогите мне ... спасибо заранее.

1 Ответ

0 голосов
/ 12 августа 2011

Проблема должна быть в потребляемой мощности. Вы запрашиваете все, что соответствует провайдеру gps (расположение в порядке ....), но gps потребляет много энергии, поэтому попробуйте удалить эту строку или установить для критерия POWER_HIGH

...