在奥利奥和更新版本的背景中从服务启动应用程序

Start App From Service in BackGround in oreo and newer

我的目标是在特定时间在每个地方(甚至锁定屏幕)显示 activity。

我可以在以前的 android 版本中直到 Oreo 完成这项工作,但是在 Oreo Google 改变方法之后,"if you want to display a view on lockScreen use "Activity.this.setShowWhenLocked(true);" :Google 说。然后我必须创建一个 activity 并且仅使用服务是不够的。

我的解决方案:我在特定时间使用 AlarmManger 运行 后台服务,该服务启动我的 activity(我的目标)。

问题 : 在以前的版本 android 直到奥利奥,我没有问题。应用程序工作正常。甚至那个时候我从最近的应用程序关闭我的应用程序,或者 phone 锁定。但在 Oreo 和更新版本中,当应用程序在前台运行时。

point :在我的意图中,我使用了这个标志:FLAG_ACTIVITY_NEW_TASK

问题:即使应用程序关闭或phone锁定,如何从后台服务运行特定activity,在奥利奥和更新版本中?

您无法使用后台服务实现此预期结果,您必须考虑 Foreground service 来完成此任务。您可以在 Android 中找到有关前台服务的更多详细信息。 docs reference

希望对您有所帮助。

对不起,但这里的问题是如何 运行 一个 activity 或一个任务,即使应用程序已关闭。只要用户与应用程序交互或有显示任务进度的持续通知,前台服务就会存在,这里不是这种情况。

我强烈建议您使用 workmanager 执行后台任务。这里有一个很棒的代码实验室:

https://codelabs.developers.google.com/codelabs/android-workmanager/#0

并在此处阅读文档:

https://developer.android.com/topic/libraries/architecture/workmanager

除了我之前做过的工作外,我在 Xiaomi 中理解了 MIUI 防止显示来自后台的弹出窗口 windowd ,然后我得到了它的许可并解决了问题,现在我可以在任何我想要的地方看到我的视图。这是给谁的简介:

权限:

1.Overlay window

2.pop-up window 来自背景(在小米和可能其他中文 Phone UI)

级别 :

  1. 设置 alarmActivityCalendar & PendingIntentAlarmManger 到 运行 我的 Service在特定时间

  2. 当我在 Service 中计算我的值时,然后 IntentActivityViewer,在这一步中,我将 FLAG_ACTIVITY_NEW_TASK 添加到我的意图中(根据google android 中的文档 Pie 您必须将此标志添加到您的意图中以用于此用法)。

  3. 根据 google 文档,在我的 ActivityViewer 中,我使用 Activity.setWhenLock() 方法显示我的视图,即使在锁定屏幕中也使用 TYPE_APPLICATION_OVERLAY Oreo 和更新版本,在 Oreo 之前使用 TYPE_TOAST 版本 6,在 6 之前使用 TYPE_SYSTEM_ERROR,在 setType.

    [=59= 中使用 setLayoutParams ]

我使用此代码从小米的后台权限中获取弹出窗口 window :

Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
        intent.setClassName("com.miui.securitycenter",
                "com.miui.permcenter.permissions.PermissionsEditorActivity");
        intent.putExtra("extra_pkgname", getPackageName());
        startActivity(intent);