繁体   English   中英

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

[英]Android: Start an Activity from a Service when app is killed

在我的应用程序中,我有一个在后台(和前台)运行的Service

在这个Service中,有一个CountdownTimer ,当它完成时,我想在某个Activity中启动应用程序并自动在Activity中做一些事情,我希望即使我的应用程序被终止或关闭,它也能工作。

我已经看到了一些答案,是其中之一,但它对我不起作用。 我找到了一个更好的解决方案并将其作为答案发布在下面,但它仍然仅在应用程序关闭但未完全终止时才有效。

即使应用程序已关闭或终止,我如何从后台Service启动Activity

你需要在 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"/>

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

看到这个答案
这个答案建议启用ScreeanOverlay设置,因为从 Android 10 开始,您不能再通过调用我使用的行从后台打开活动。
要使其正常工作,您必须通过Manifest.xml添加此权限:

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

然后用户必须启用Display over other apps设置之上。
我搜索了一个让用户更轻松地使用此设置的选项,并找到了这个答案
此答案提供了一个代码,可将用户重定向到Display over other apps设置

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

然后我用通知的内容(文本)指导用户如何启用设置。
启用设置后,我在工作之前使用的行。\

那么,问题解决了吗?

未完全解决

上面描述的整个配置都有效,但前提是应用程序没有被杀死。
如果该应用程序被终止并且我尝试了上面列出的方法,该应用程序加入了最近的应用程序列表,但不会打开和显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM