我正在尝试构建可用于通话的应用程序。
我的CallActivity
在清单文件中声明为singleTop
。我有一个前台服务(CallService
),该应用程序在用户通话时一旦应用程序进入后台就会启动,因为该设备在通话过程中一定不能进入睡眠状态。
我的CallService
的通知允许用户继续通话或挂断电话。我的目标是让用户按下通知上的按钮并挂断正在进行的呼叫,而无需将应用程序置于前台。
我尝试使用PendingIntent.getActivity()
在应用程序进入后台后从CallService启动CallActivity。但是我还不能挂断电话。这是一些代码...
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
之前的活动。
PS:在onNewIntent()
中的CallActivity
方法中完成了挂断电话的逻辑。
答案 0 :(得分:0)
您可以让Activity
注册一个匿名BroadcastReceiver
来监听特定广播Intent
。当您的Service
要完成Activity
时,它可以发送Intent
正在收听的广播Activity
。
在onReceive()
中的BroadcastReceiver
中,只需调用finish()
。这不会将Activity
带到前台。