GPS переходит в спящий режим в сервисе Android - PullRequest
1 голос
/ 25 февраля 2012

Я создал службу GPS, которая регулярно читает обновления местоположения. Ранее существовала проблема, из-за которой GPS переходил в спящий режим через некоторое время, и после этого обновления о местоположении не давались.

Теперь я изменил свой код, чтобы отменить регистрацию и регистрировать GPS обновления местоположения на регулярной основе. Это решает мою проблему перехода GPS в спящий режим, но создается новая проблема. Это

Мой сервис прекращается через некоторое время. Я не могу проверить причину этого. Пожалуйста, помогите.

Вот некоторые фрагменты кода

@Override
public void onCreate() {
    super.onCreate();
    timer.schedule(checkLocationListener, new Date(), 1000 * 60 * 15);
}

private TimerTask checkLocationListener = new TimerTask() {
    @Override
    public void run() {
        handler.post(new Runnable() {
            public void run() {
                lm.removeUpdates(LocationService.this);
  lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, CommonConstants.GPS_POLL,
                    CommonConstants.GPS_MIN_DIST, LocationService.this);
            }
        });
    }
};



@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(LocationService.class.getSimpleName(), "Start");
    valueMap.put(CommonConstants.STATUS, CommonConstants.STATUS_DROP);
    trackMe();
    new Thread() {
        public void run() {
            while (true) {
                try {
                    String url = DeviceConfig.getMessage();
                    if (url == null) {
                        Thread.sleep(60000);
                        continue;
                    }
                    HttpRequester.getServerResponse(url, null);
                    DeviceConfig.addValue(CommonConstants.SERVER_UPD, "" + System.currentTimeMillis());
                    DeviceConfig.removeMessage();
                } catch (Exception e) {
                    Log.e(LocationService.class.getSimpleName(), "Error", e);
                }
            }
        }
    }.start();
    return (START_NOT_STICKY);
}

private void trackMe() {
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, CommonConstants.GPS_POLL, CommonConstants.GPS_MIN_DIST,
        this);
    DeviceConfig.addValue(CommonConstants.GPS_STATE, lm.isProviderEnabled(LocationManager.GPS_PROVIDER)
        ? CommonConstants.ON : CommonConstants.OFF);
}

Ответы [ 3 ]

1 голос
/ 25 февраля 2012

Если вы действительно хотите, чтобы ваш сервис продолжал работать, вам нужно сделать его приоритетным (см. http://developer.android.com/reference/android/app/Service.html#startForeground(int, android.app.Notification))

Но почему бы не использовать этот http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long, float, android.location.Criteria, android.app.PendingIntent) для запуска службы при каждом изменении местоположения?

Phil

1 голос
/ 25 февраля 2012

Вам не нужно регистрировать / отменять регистрацию получателя обновлений местоположения снова и снова. Кажется, ваша служба остановлена, поэтому запустите службу в режиме ожидания, таким образом, служба может быть остановлена ​​только явно.

0 голосов
/ 03 марта 2012

Пока я этим занимаюсь.

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
   CommonConstants.GPS_POLL,CommonConstants.GPS_MIN_DIST, pendingIntent);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
   CommonConstants.NW_POLL, CommonConstants.NW_MIN_DIST, pendingIntent);

Пожалуйста, предложите, если у вас есть лучшее решение.

...