Я пытаюсь создать приложение, которое можно использовать для звонков.Мой CallActivity
объявлен singleTop
в файле манифеста.У меня есть служба переднего плана (CallService
), которая запускается, как только приложение переходит в фоновый режим, когда пользователь находится на вызове, поскольку устройство не должно спать во время вызова.
Уведомление для моего CallService
позволяет пользователю возобновить звонок или зависание.Моя цель состоит в том, чтобы пользователь нажал кнопку в уведомлении и повесил трубку текущего вызова, не выводя приложение на передний план.
Я пытался использовать PendingIntent.getActivity()
для запуска CallActivity, когда приложение находится в фоновом режиме,из CallService.Но я еще не смог повесить трубку.Вот некоторый код ...
Intent returnToCallIntent = new Intent(this, CallActivity.class);
PendingIntent returnPendingIntent = PendingIntent.getActivity(this, 0, returnToCallIntent, 0);
Intent hangUpCallIntent = new Intent(this, CallActivity.class);
hangUpCallIntent.putExtra("ACTION_FINISH_ACTIVITY", true);
PendingIntent hangUpPendingIntent = PendingIntent.getActivity(this, 0, hangUpCallIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Сейчас оба ожидающих намерения преобразуются в одно и то же действие, которое вешает вызов, в то время как приложение выводится на передний план.Я понял, что это происходит потому, что 2 намерения различаются только в своих дополнениях и, следовательно, Android не различает их, то есть intent#filterEquals()
не видит никакой разницы между ними.
Но более важный вопрос заключается в том, как можноЯ finish()
CallActivity
и заставил его молча сорваться со спины, не выводя его на передний план.Кроме того, после остановки CallActivity
мне нужно остановить CallService
в фоновом режиме.Поэтому, когда пользователь нажимает на приложение на экране последних, он / она должен увидеть активность, которая была до CallActivity
в backstack.
PS: Логика для завершения вызова выполнена в методе onNewIntent()
в CallActivity
.