[英]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.