Как отправить данные в ActivityRecognition Intent Service без замены данных об активности?

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

Я использовал API распознавания активности для отслеживания активности пользователя.

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

Ниже приведен мой класс обслуживания для целей распознавания активности:

/**
 * Called when a new activity detection update is available.
 */
@Override
protected void onHandleIntent(Intent intent) {   
   // mPId = intent.getStringExtra("PID");

--- Когда я отправляю некоторые данные, добавив дополнительные данные вместе с ожидающим намерением, я не получаю данные о намерениях пользователя. Данные о намерениях пользователя заменяются моими данными

    // If the intent contains an result data
    if (ActivityRecognitionResult.hasResult(intent)) {
        // Get the update
        ActivityRecognitionResult result = ActivityRecognitionResult
                .extractResult(intent);

        // Log the update
        saveActivityRecognitionResult(result);
    }
}

Приведенный выше код работает нормально, если я не передал никаких собственных данных.

Я хочу отправить некоторые данные вместе с этим намерением. Я установил эти данные вместе с ожидающим намерением. Но если я установлю данные, я получу только те данные, а не данные о намерениях пользователя.

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

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

1 ответ

Я бы не стал передавать это намерение дальше, но взял бы данные в вашем onHandleIntent и добавить его к другому намерению.

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

Не использовать IntentServiceпотому что до или во время выполнения своей работы телефон может заснуть, если вы не приобретете WakeLock, Познакомьтесь с WakefulBroadcastReceiver, чтобы разобраться с ним.

Другое решение состоит в том, чтобы просто использовать BroadcastReceiver как гарантированно телефон не заснет.