当前位置: 首页 > 知识库问答 >
问题:

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

姚臻
2023-03-14

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

在这个Service中,有一个Countdown Timer,当它完成时,我想在某个Activity中启动应用程序并在Activity中自动执行一些操作,即使我的应用程序被杀死或关闭,我也希望它能正常工作。

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

如何从后台Service启动活动,即使应用程序已关闭或关闭?

共有3个答案

戎志勇
2023-03-14

请参阅此答案。
此答案建议启用ScreeanOverlay设置,因为从Android 10及更高版本开始,您不再可以仅通过调用我使用的行从后台打开活动。
要使其工作,您必须通过Manifest.xml添加此权限:

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

然后用户必须在其他应用程序上启用显示设置
我搜索了一个选项,让用户更容易地使用这个设置,并找到了这个答案
这个答案给出了一个代码,可以将用户重定向到其他应用程序上的显示设置

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

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

那么问题解决了?

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

岳俊晖
2023-03-14

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

盛超
2023-03-14

你需要像这样启动前台服务

  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"/>
 类似资料:
  • 我有一个要求,执行一个任务,在正好每5分钟。我考虑了多个选项,并尝试使用类来触发任务来实现这一点。但是,当应用程序被杀死时,我无法触发警报。 当应用程序打开或在后台运行时,警报似乎工作得完美无缺,但一旦我退出应用程序,它似乎完全停止了。 我的实现是使用函数,并自己处理重复这个过程。最初的警报在5秒后触发,然后在此之后每5分钟触发一次。 MyService.kt:

  • 另外,是否有可能在保留用户数据的同时清除使用ADB的应用程序的缓存?似乎清除了所有用户数据。我只想清除缓存。 我之所以这么问是因为我正在对一些用户应用程序进行性能测试。为了使每个测试有效,我希望确保没有任何用户应用程序有任何任务,活动,服务和缓存已经在后台。

  • 我的目标是每12小时更新一次我的应用令牌(使用网络请求),无论应用程序是在后台还是被杀死,所以我使用workmanager来解决这个问题。但周期性任务仅在应用程序处于后台或打开状态时有效,但当我杀死应用程序时,周期性任务停止以更新我的应用程序令牌。 这是我的代码: 我正在使用workmanager 2.4.0版本

  • 我有一个通过FCM数据消息触发来电的应用程序(优先级:高,没有通知有效载荷)。当app处于前台或后台时,app接收呼叫。对于上述情况,在锁定屏幕中接收通知(来电)。 但由于某种原因,当关闭应用程序或从多任务托盘中刷卡时,电话就不再接到了。我认为服务被扼杀了。我能做什么? 工作流当收到FCM通知时,一个后台服务启动,然后该服务将自身更改为具有“来电”通知的前台服务。我也在使用全屏意图。下层是我用来服

  • 我在写一个玩家轮流参加的游戏。在一个回合结束时,我将我的数据发送到服务器,并更新我的数据库,让我知道现在轮到另一个玩家了。问题是,如果有人在中途扼杀了应用程序怎么办?我是说去找任务经理然后杀了它。 编辑:我还应该提到这是在一个片段中,我正在检查这个,但不要认为这会有什么不同。