Каков наилучший способ завершить () действие из службы переднего плана, не выводя приложение на передний план? - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь создать приложение, которое можно использовать для звонков.Мой 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.

1 Ответ

0 голосов
/ 25 марта 2019

Вы можете сделать так, чтобы ваш Activity зарегистрировал анонимного BroadcastReceiver, который прослушивает определенную трансляцию Intent.Когда ваш Service хочет завершить Activity, он может просто отправить трансляцию Intent, которую Activity ожидает.

В onReceive() из BroadcastReceiver, просто позвоните finish().Это не выведет Activity на первый план.

...