Android:当应用程序被关闭时,从服务启动活动

3
在我的应用程序中,我有一个在后台(和前台)运行的“服务”。
在这个“服务”中,有一个“倒计时器”,当它完成时,我想要在某个特定的“活动”中启动应用程序,并自动执行一些“活动”中的操作,即使我的应用程序被杀死或关闭也要能够正常工作。
我已经看到了一些答案,其中这个是其中之一,但对我来说它不起作用。我找到了一个更好的解决方案,并将其发布为下面的答案,但仍然只适用于应用程序被关闭但不完全被杀死的情况。
如何从后台“服务”中启动一个“活动”,即使应用程序被关闭或杀死?
4个回答

0

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

你说的 AppService 是什么意思? - Nitzan Daloomy
AppService.class是用来处理你想要的一些工作的类。 - Harshit Gupta

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

我不这么认为。你可以尝试一下。 - Sambhav Khandelwal
尝试了一下...这个活动无法打开,应用程序保持关闭但在最近使用的应用中可见。 - Nitzan Daloomy
1
无论如何,拥有它会很棒...直到出现解决方案,我当然会继续前进。我已经遇到了另一个问题,不久将分享一个问题(: - Nitzan Daloomy
会等待它。 - Sambhav Khandelwal
刚刚分享了这个(https://dev59.com/w3QOtIcB2Jgan1zndwoq)。 - Nitzan Daloomy
显示剩余3条评论

0
您需要请求并启用应用程序的悬浮窗权限才能达到此目的。如果没有这个权限,当应用在前台时无法启动任何活动。
我曾经遇到同样的问题,在查看this answer的回复后,成功解决了它。

-1

请查看此答案
此答案建议启用ScreeanOverlay设置,因为在Android 10及更高版本中,您不能仅通过调用我使用的代码行来从后台打开活动。
要使其正常工作,您需要通过您的Manifest.xml添加此权限:

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

然后用户必须启用“显示在其他应用程序上方”设置。
我搜索了一个更容易让用户进入此设置的选项,找到了this answer
这个答案提供了一个代码,可以将用户重定向到“显示在其他应用程序上方”设置。

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

然后我通过通知内容(文本)指导用户如何启用设置。
一旦启用了该设置,我之前使用的行就可以工作。

所以,问题解决了吗?

并未完全解决

上述整个配置是有效的,但仅当应用程序未被终止时才有效。
如果应用程序已被终止并且我尝试上述方法,则应用程序将加入最近使用的应用程序列表,但不会打开或显示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接