【发布时间】:2019-08-15 05:59:04
【问题描述】:
我正在尝试构建一个可用于通话的应用。
我的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 个 Intent 仅在它们的附加内容上有所不同,因此 android 无法区分它们,即intent#filterEquals() 看不出它们之间有任何区别。
但更重要的问题是我如何finish() CallActivity 并让它默默地从后台弹出,而不是将其带到前台。另外,在停止CallActivity 之后,我需要在后台停止CallService。因此,当用户在最近的屏幕中点击应用程序时,她/他应该会在后台看到CallActivity 之前的活动。
PS:挂断电话的逻辑已经在CallActivity的onNewIntent()方法中完成。
【问题讨论】:
-
System.exit(1);见How to exit an Android app programmatically? -
谢谢@JonGoodwin 但
System.exit()似乎有点苛刻。我尝试了下面@David Wasser 建议的解决方案,似乎效果很好。 -
System.exit()绝对不是你想要的。 Android 将其解释为“您的应用崩溃了”。
标签: android android-activity android-service android-pendingintent