android - 在不将应用程序带到前台的情况下,从前台服务完成()活动的最佳方法是什么?
问题描述
我正在尝试构建一个可用于通话的应用程序。My在清单文件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);
现在,两个待处理的意图都解决了相同的操作,即挂断呼叫,同时将应用程序置于前台。我发现这正在发生,因为这两个意图仅在它们的额外内容上有所不同,因此 android 不会区分它们,即它们intent#filterEquals()
之间没有任何区别。
但更重要的问题是我怎样才能让它默默地从后台弹出,而不把它带到前台finish()
。CallActivity
另外,在CallActivity
停止之后,我需要CallService
在后台停止。因此,当用户在最近的屏幕上点击应用程序时,她/他应该会看到在CallActivity
backstack 之前的活动。
PS:挂断电话的逻辑已经在onNewIntent()
方法中完成CallActivity
。
解决方案
你可以让你的Activity
注册一个匿名的BroadcastReceiver
,监听一个特定的广播Intent
。当您Service
想完成时Activity
,它可以发送正在收听的Intent
广播Activity
。
中onReceive()
的BroadcastReceiver
,刚打电话finish()
。这不会将 带到Activity
前台。