在奥利奥和更新版本的背景中从服务启动应用程序
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)
级别 :
设置 alarm
从 Activity
到 Calendar
& PendingIntent
在 AlarmManger
到 运行 我的 Service
在特定时间
当我在 Service
中计算我的值时,然后 Intent
到 ActivityViewer
,在这一步中,我将 FLAG_ACTIVITY_NEW_TASK
添加到我的意图中(根据google android
中的文档 Pie
您必须将此标志添加到您的意图中以用于此用法)。
根据 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);
我的目标是在特定时间在每个地方(甚至锁定屏幕)显示 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)
级别 :
设置
alarm
从Activity
到Calendar
&PendingIntent
在AlarmManger
到 运行 我的Service
在特定时间当我在
Service
中计算我的值时,然后Intent
到ActivityViewer
,在这一步中,我将FLAG_ACTIVITY_NEW_TASK
添加到我的意图中(根据googleandroid
中的文档Pie
您必须将此标志添加到您的意图中以用于此用法)。根据 google 文档,在我的
[=59= 中使用ActivityViewer
中,我使用Activity.setWhenLock()
方法显示我的视图,即使在锁定屏幕中也使用TYPE_APPLICATION_OVERLAY
Oreo 和更新版本,在 Oreo 之前使用TYPE_TOAST
版本 6,在 6 之前使用TYPE_SYSTEM_ERROR
,在setType
.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);