Как остановить распознавание активности после выхода из приложения?

Я работаю над приложением для отслеживания активности пользователей. Мне нужно отслеживать активность пользователя, даже если приложение работает в фоновом режиме или закрывается.

Я запустил отслеживание активности пользователя и вышел из приложения. Через какой-то момент я хочу остановить отслеживание активности пользователя. Теперь у приложения нет экземпляра. У меня нет экземпляра, чтобы остановить отслеживание активности пользователя.

После удаления приложения из моего недавнего приложения все статические ссылки очищаются. Все работает нормально. Но я не знаю, как остановить отслеживание активности пользователя через некоторое время после закрытия приложения.

/**
 * Make the actual update request. This is called from onConnected().
 */
private void continueRequestActivityUpdates() {
    /*
     * Request updates, using the default detection interval. The
     * PendingIntent sends updates to ActivityRecognitionIntentService
     */
    getActivityRecognitionClient().requestActivityUpdates(
            Constants.DETECTION_INTERVAL_MILLISECONDS,
            createRequestPendingIntent());

}

Я хочу знать, как остановить это, когда я был в фоновом режиме. Потому что, как только приложение закрывается, у меня нет возможности его остановить.

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


person M Vignesh    schedule 11.12.2014    source источник
comment
Как вы отслеживаете активность пользователей? Поделитесь кодом. вы пользуетесь какой-нибудь услугой?   -  person SweetWisher ツ    schedule 15.12.2014
comment
@SweetWisherシ Я добавил код... Пожалуйста, проверьте сейчас.   -  person M Vignesh    schedule 15.12.2014


Ответы (1)


Чтобы остановить обновления распознавания активности, используйте тот же шаблон, который вы использовали для запроса обновлений, но вызовите removeActivityUpdates() вместо requestActivityUpdates(). Взято отсюда: ссылка

Реализуйте этот метод в том же классе и вызывайте его, когда хотите удалить обновления:

private void removeActivityUpdates() {
    mActivityRecognitionClient = new ActivityRecognitionClient(mContext, this, this);

    Intent intent = new Intent(mContext, ActivityRecognitionIntentService.class);

    mActivityRecognitionPendingIntent = PendingIntent.getService(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    mActivityRecognitionClient.removeActivityUpdates(mActivityRecognitionPendingIntent);
}
person abhi    schedule 18.12.2014
comment
Когда приложение закрывается, у меня нет экземпляра private UserActivityDetectionRemover mUserActivityDetectionRemover; Это может быть нулем. Поэтому я не могу вызвать удаление. Когда приложение открыто, я смог удалить его правильно. - person M Vignesh; 18.12.2014
comment
Но почему бы вам не вызвать это из onDestroy? Поэтому, прежде чем ваше приложение будет уничтожено, обновления будут удалены. - person abhi; 18.12.2014
comment
Мое требование: я хочу отслеживать активность пользователя, даже если приложение не запущено. Он по-прежнему продолжает работать, даже если приложение закрывается. - person M Vignesh; 18.12.2014
comment
но если приложение убито, как вы можете отслеживать активность пользователя? мне кажется, что ваш дизайн не является geed, потому что, если вы можете отслеживать активность пользователя, это означает, что в памяти есть объекты для вашего приложения, и поэтому вы даже можете удалить обновления в этом случае. - person abhi; 18.12.2014
comment
Android служба намерений будет запущена, даже если приложение будет закрыто. Запросите активность пользователя с ожидающим намерением. Этот вызов отправляет вам информацию об активности пользователя с указанным интервалом в вашу службу намерений, даже если приложение закрыто. - person M Vignesh; 19.12.2014
comment
Не можете ли вы снова создать объект, используя то же ожидающее намерение и используя PendingIntent.FLAG_UPDATE_CURRENT? - person abhi; 19.12.2014
comment
Я должен вызвать removeActivityUpdates(), и мне нужно отключиться, затем я должен отменить ожидающее намерение. - person M Vignesh; 19.12.2014