Activity Transition API запрашивает активность-transition-updates один раз - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь внедрить обновления перехода активности в фоновом режиме моего приложения. Моя цель - один раз запросить обновления перехода активности и постоянно получать обновления перехода активности в фоновом режиме. Чтобы добиться этого, я реализовал следующее:

PendingIntent pi = PendingIntent.getBroadcast(mApplicationContext, 100, intent,
                PendingIntent.FLAG_NO_CREATE);
        if (pi == null) {
            pi = PendingIntent.getBroadcast(mApplicationContext, 100,
                    intent, PendingIntent.FLAG_UPDATE_CURRENT);
            Task<Void> task = ActivityRecognition.getClient(mApplicationContext)
                    .requestActivityTransitionUpdates(atr, pi);
            task.addOnCompleteListener(task1 -> {
                if (task1.isSuccessful()) {
                    Log.v(TAG, "Travel behavior activity-transition-update set up");
                } else {
                    Log.v(TAG, "Travel behavior activity-transition-update failed set up: " +
                            task1.getException().getMessage());
                    task1.getException().printStackTrace();
                }
            });
        }

Итак, если в этом коде PendingIntent.getBroadcast(mApplicationContext, 100, intent,PendingIntent.FLAG_NO_CREATE); возвращает ноль, я вызываю метод requestActivityTransitionUpdates. В противном случае я не запрашиваю, потому что обновления перехода активности уже были запрошены с ожидающим намерением.

Однако этот код не работает. После первого requestActivityTransitionUpdates, PendingIntent.getBroadcast(mApplicationContext, 100, intent, PendingIntent.FLAG_NO_CREATE) возвращает ожидающее намерение, и я не звоню requestActivityTransitionUpdates, и я прекращаю получать обновления перехода.

Если я использую следующий код, удалив строку PendingIntent.getBroadcast(mApplicationContext, 100, intent, PendingIntent.FLAG_NO_CREATE):

PendingIntent pi = PendingIntent.getBroadcast(mApplicationContext, 100,
                    intent, PendingIntent.FLAG_UPDATE_CURRENT);
            Task<Void> task = ActivityRecognition.getClient(mApplicationContext)
                    .requestActivityTransitionUpdates(atr, pi);
            task.addOnCompleteListener(task1 -> {
                if (task1.isSuccessful()) {
                    Log.v(TAG, "Travel behavior activity-transition-update set up");
                } else {
                    Log.v(TAG, "Travel behavior activity-transition-update failed set up: " +
                            task1.getException().getMessage());
                    task1.getException().printStackTrace();
                }
            });

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

Итак, есть ли способ один раз запросить обновления перехода и постоянно получать обновления перехода?

1 Ответ

0 голосов
/ 25 июля 2019

Вы можете использовать второй способ.

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

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

...