在我的应用程序中,我有一个Service
在后台(和前台)运行。
在这个Service
中,有一个CountdownTimer
,当它完成时,我想在某个Activity
中启动应用程序,并自动在Activity
中执行一些操作,我希望即使我的应用程序被杀死或关闭,它也能正常工作。
我已经看到了一些答案,this是其中之一,但它对我不起作用。我已经找到了一个更好的解决方案,并将其作为答案发布在下面,但仍然,只有在应用程序关闭但未完全关闭时才有效。
如何从后台Service
启动Activity
,即使应用程序已关闭或终止?
4条答案
按热度按时间bksxznpy1#
您需要在FOREGROUND_SERVICE中启动服务,如下所示
并在Main.xml中添加此行
4nkexdtk2#
正如
NitzanDaloomy
在他的回答here中建议的那样,我们可以使用SYSTEM_ALERT_WINDOW
,但当它被杀死时不会打开应用程序,而是将其放入最近使用列表中。现在,因为我们的应用程序不再关闭(它在后台),我们可以使用startActivity(Intent intent)
,然后,应用程序将打开uemypmqf3#
您需要请求并启用应用的覆盖权限才能实现这一点。如果没有这一点,您的应用程序在前台时无法在屏幕上显示任何活动。
我遇到了同样的问题,在看到this answer的响应后,我解决了这个问题。
cuxqih214#
参见this answer。
这个答案建议启用
ScreeanOverlay
设置,因为从Android 10及更高版本开始,您无法再通过调用我使用的线路从后台打开Activity。要使其工作,您必须通过
Manifest.xml
添加此权限:然后用户必须启用
Display over other apps
设置。我搜索了一个选项,让用户更容易地设置这个设置,并找到了this answer。
这个答案给出了一个代码,将用户重定向到
Display over other apps
设置然后我用通知的内容(文本)指导用户如何启用设置。
启用该设置后,我在工作前使用的线路。
问题解决了吗
未完全解决
上面描述的整个配置工作,但只有在应用程序没有被杀死的情况下才工作。
如果应用程序被杀死,我尝试上面列出的方法,应用程序加入最近的应用程序列表,但不会打开和显示。