Android:当应用程序被杀死时从服务启动Activity

kxkpmulp  于 2023-06-04  发布在  Android
关注(0)|答案(4)|浏览(395)

在我的应用程序中,我有一个Service在后台(和前台)运行。
在这个Service中,有一个CountdownTimer,当它完成时,我想在某个Activity中启动应用程序,并自动在Activity中执行一些操作,我希望即使我的应用程序被杀死或关闭,它也能正常工作。
我已经看到了一些答案,this是其中之一,但它对我不起作用。我已经找到了一个更好的解决方案,并将其作为答案发布在下面,但仍然,只有在应用程序关闭但未完全关闭时才有效。
如何从后台Service启动Activity,即使应用程序已关闭或终止?

bksxznpy

bksxznpy1#

您需要在FOREGROUND_SERVICE中启动服务,如下所示

Intent intent = new Intent(this, AppService.class);
        
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        startForegroundService(intent);
    }

并在Main.xml中添加此行

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
4nkexdtk

4nkexdtk2#

正如NitzanDaloomy在他的回答here中建议的那样,我们可以使用SYSTEM_ALERT_WINDOW,但当它被杀死时不会打开应用程序,而是将其放入最近使用列表中。现在,因为我们的应用程序不再关闭(它在后台),我们可以使用startActivity(Intent intent),然后,应用程序将打开

uemypmqf

uemypmqf3#

您需要请求并启用应用的覆盖权限才能实现这一点。如果没有这一点,您的应用程序在前台时无法在屏幕上显示任何活动。
我遇到了同样的问题,在看到this answer的响应后,我解决了这个问题。

cuxqih21

cuxqih214#

参见this answer
这个答案建议启用ScreeanOverlay设置,因为从Android 10及更高版本开始,您无法再通过调用我使用的线路从后台打开Activity。
要使其工作,您必须通过Manifest.xml添加此权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

然后用户必须启用Display over other apps设置。
我搜索了一个选项,让用户更容易地设置这个设置,并找到了this answer
这个答案给出了一个代码,将用户重定向到Display over other apps设置

if (!Settings.canDrawOverlays(this)) {
    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
    startActivityForResult(intent, 0);
}

然后我用通知的内容(文本)指导用户如何启用设置。
启用该设置后,我在工作前使用的线路。
问题解决了吗

未完全解决

上面描述的整个配置工作,但只有在应用程序没有被杀死的情况下才工作。
如果应用程序被杀死,我尝试上面列出的方法,应用程序加入最近的应用程序列表,但不会打开和显示。

相关问题