首页 > 解决方案 > 在不将应用程序带到前台的情况下,从前台服务完成()活动的最佳方法是什么?

问题描述

我正在尝试构建一个可用于通话的应用程序。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在后台停止。因此,当用户在最近的屏幕上点击应用程序时,她/他应该会看到在CallActivitybackstack 之前的活动。

PS:挂断电话的逻辑已经在onNewIntent()方法中完成CallActivity

标签: androidandroid-activityandroid-serviceandroid-pendingintent

解决方案


你可以让你的Activity注册一个匿名的BroadcastReceiver,监听一个特定的广播Intent。当您Service想完成时Activity,它可以发送正在收听的Intent广播Activity

onReceive()BroadcastReceiver,刚打电话finish()。这不会将 带到Activity前台。


推荐阅读