Приложение GPS слежения (стратегия) - PullRequest
2 голосов
/ 19 февраля 2012

В настоящее время я работаю над приложением GPS-слежения (только расстояние, не сохраняя каждое значение или отображая в MapView) для бортового журнала водителей. Дело в пристыкованном телефоне, мне наплевать на энергопотребление. Моя реализация до сих пор - это действие, которое вызывает класс GPS-Helper, который получает long / lat. Само действие вычисляет пройденное расстояние, отображает его для пользователя и запускает панель уведомлений, которая также отображает расстояние. Чтобы активность была активной и не уничтожалась ОС, я использую ЧАСТИЧНЫЙ WakeLock для активности.

Моя проблема в том, что это не работает должным образом, потому что мое приложение, кажется, убито ОС, несмотря на WakeLock. Я думаю, что он убит, потому что, когда я нажимаю на элемент панели уведомлений (например, через 15-30 минут), чтобы увидеть пройденное расстояние в моей беговой деятельности, активность отображается так, как будто она запускает новую GPS-дорожку вместо отображения пройденного расстояния от прежней стартовой колеи. Разрешение WAKELOCK правильно установлено в манифесте.

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

Ответы [ 2 ]

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

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

Эта ссылка может помочь вам сделать то, что вы хотите:

Как вывести Android-активность на передний план с помощью уведомления

0 голосов
/ 10 марта 2015

Вы должны использовать сервис, который вызывает startForground, который требует уведомления.Это уведомление будет вашей точкой входа обратно в приложение.Служба может работать в фоновом режиме и регистрировать координаты вне зависимости от жизненного цикла вашей активности.

    @Override
        public int onStartCommand(Intent intent, int flags, int startId) {

            if(intent.getAction().equals(DRIVELOG_ACTION_STOPLOGGING)){               handleStopLoggingCommand(intent.getBooleanExtra(SAVE_LOG,false));
            }
            else if(intent.getAction().equals(DRIVELOG_ACTION_STARTLOGGING)){
                handleStartLoggingCommand();
            }
            return START_STICKY;
        }


   private void handleStartLoggingCommand() {
        startForeground(DriveLoggerNotification.notificationId,DriveLoggerNotification.createInDriveLogNotification(this,driveLogLiveData));
    if(googleApiClient.isConnected()){
        startMonitoringLocation();
    }else {
        googleApiClient.connect();
    }

}

Этот код взят из моего GpsLoggingService

...