Я сейчас пытаюсь разбудить мое приложение, когда пользователь запускает или останавливает ходьбу.Вот кодЯ использовал ожидающее намерение, чтобы оно сработало, даже если мое приложение было убито.
Код работает, и ожидающее намерение отправляет событие широковещательному получателю.Однако через несколько часов он перестает работать.
Я прочитал ожидающий намерения, хранится в оперативной памяти.Очищает ли ОС эти ожидающие события иногда для экономии памяти?Если тогда, как мне обеспечить постоянную работу моего ожидающего намерения?
public void subscribe(Context context){
List<ActivityTransition> transitions = new ArrayList<>();
transitions.add(
new ActivityTransition.Builder()
.setActivityType(DetectedActivity.WALKING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build());
transitions.add(
new ActivityTransition.Builder()
.setActivityType(DetectedActivity.WALKING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build());
ActivityTransitionRequest request = new ActivityTransitionRequest(transitions);
Intent intent = new Intent(context, TransitionsReceiver.class);
intent.setAction(TransitionsReceiver.TRANSITIONS_RECEIVER_ACTION);
pendingIntent = pendingIntent.getBroadcast(context,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
Task<Void> task =
ActivityRecognition.getClient(context)
.requestActivityTransitionUpdates(request, pendingIntent);
task.addOnSuccessListener(
new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void result) {
Log.i("Shield", "Transitions Api was successfully registered.");
}
});
task.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(Exception e) {
Log.e("Shield", "Transitions Api could not be registered: " + e);
}
});
}