Я пытаюсь внедрить обновления перехода активности в фоновом режиме моего приложения. Моя цель - один раз запросить обновления перехода активности и постоянно получать обновления перехода активности в фоновом режиме. Чтобы добиться этого, я реализовал следующее:
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, даже если фактический переход активности не произошел.
Итак, есть ли способ один раз запросить обновления перехода и постоянно получать обновления перехода?