我正在尝试在我的应用程序后台实现活动转换更新。我的目标是请求一次活动转换更新,并一直在后台获取活动转换更新。为了实现这一点,我实现了以下内容:
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);
返回 null,我调用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 类中返回当前活动。
那么,有没有一种方法可以请求一次转换更新并一直获取转换更新?