Система GPS не перезапускается после вызова «removeUpdates» - PullRequest
3 голосов
/ 16 августа 2011

В моем приложении я вызываю requestLocationUpdates в методе onStart () и получаю обновления правильно.

Когда я выключаю GPS, вызывая «removeUpdate (locationlistener)», я прекращаю получать обновления, как и ожидалось.

Проблема в том, что когда я хочу перезапустить систему GPS, вызвав метод requestLocationUpdates снова, он не работает! Он никогда не входит в методы "onLocationChanged" или "onStatusChanged"

мой код gpsLocationListener;

public final LocationListener gpsLocationListener = new LocationListener() {
    public void onStatusChanged(String provider, int status, Bundle extras) {
        switch (status) {
        case LocationProvider.AVAILABLE:
            Logging.TraceMessage("GPS available again", Logging.INFORMATION, Logging.MAINACTIVITY);
            break;
        case LocationProvider.OUT_OF_SERVICE:
            Logging.TraceMessage("GPS out of service", Logging.INFORMATION, Logging.MAINACTIVITY);
            deviceSettings.gpsStatus = "2";
            break;
        case LocationProvider.TEMPORARILY_UNAVAILABLE:
            Logging.TraceMessage("GPS temporarily unavailable", Logging.INFORMATION, Logging.MAINACTIVITY);
            break;
        }
    }

    public void onProviderEnabled(String provider) {
        Logging.TraceMessage("GPS Provider Enabled", Logging.INFORMATION, Logging.MAINACTIVITY);
    }

    public void onProviderDisabled(String provider) {
        Logging.TraceMessage("GPS Provider Disabled", Logging.INFORMATION, Logging.MAINACTIVITY);
        deviceSettings.gpsStatus = "2";
    }

    public void onLocationChanged(Location location) {
        if(location == null) return;

        tempLoc.setItem(location.getLongitude(), location.getLatitude(), deviceSettings.getCurrentTime(), deviceSettings.satelliteCount, location.getSpeed());
            if (!SafeLocation.IsSafe(tempLoc) ){
            return;
        }

        deviceSettings.currX = tempLoc._x;
        deviceSettings.currY = tempLoc._y;
        deviceSettings.currSpeed = tempLoc._speed;
        deviceSettings.currValid = true;

    }
};

мой код удаления обновлений;

if( ! deviceSettings.isprogramModeActive ){

                         if(gpsLocationListener != null){
                             try {
                                 locationManager.removeUpdates(gpsLocationListener);
                             } catch (Exception e) {
                             }                           
                         }
                         mylocatewait(30000);//30 saniye bekle
                         continue;
                    }

мой запрос снова код:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, ServerSettings.getGpsPer()*1000, 0, gpsLocationListener);

1 Ответ

1 голос
/ 17 августа 2011

Я решаю проблему!

Я создаю вызов обработчиком из потока.

locateHandler.sendEmptyMessage(1);

Я вызываю следующий код из обработчика, а не из потока.

 Handler locateHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what == 0)
                locationManager.removeUpdates(gpsLocationListener);
            else if(msg.what == 1)
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, ServerSettings.getGpsPer()*1000, 0, gpsLocationListener);
        }
    };
...