一个简单的调用
Intent serviceIntent = new Intent(this, NotificationService.class);
startService(serviceIntent);
如果应用程序在后台,则将其置于前面,如果应用程序已关闭,则不会发生任何反应。我想避免这种行为,但我不知道该怎么做。 它发生在安卓O和P上。 我已经设置了在特定时间唤醒我的应用程序的alarmManager
,然后pendingIntent
启动Activity
(它不会在屏幕中显示任何内容(,并检查从Intent
收到的操作以确定要执行的操作。我的应用程序中有 2 个服务,每次唤醒它们时,它们都会将应用程序带到前面,这对用户来说很烦人。
我通过在创建将由AlarmManager
触发的PendingIntent
时将PendingIntent.getActivity()
替换为PendingIntent.getBroadcast()
来解决问题。这是代码:
private PendingIntent getNotifyIntent() {
Intent notifyIntent = new Intent(mContext, MyBroadcastReceiver.class);
return PendingIntent.getBroadcast(mContext, 0, notifyIntent, 0);
}
我之前已经使用过这段代码(PendingIntent.getActivity()
(,但我以前从未见过该应用程序进入屏幕。我使用的活动是完全透明和不可见的,它没有在屏幕上放置布局。我使用它是因为由于某种原因使用广播不起作用。但是现在应用程序正在打开,我认为这是因为打开的透明活动会检查应该做什么和关闭什么,在它显示在屏幕上之前调用活动。
恢复:问题不在于服务本身,而在于我设置
AlarmManager
坦克你都在帮助!
在 Android 8.0 之前,创建前台服务的常用方法是 以创建后台服务,然后将该服务提升到 前景。对于安卓8.0,有一个复杂因素;系统介绍 不允许后台应用创建后台服务。为 这个原因,Android 8.0引入了新方法 startForegroundService(( 在前台启动一个新服务。 系统创建服务后,应用有五秒钟的时间 调用服务的 startForeground(( 方法来显示新服务的 用户可见的通知。如果应用不调用 startForeground(( 在时间限制内,系统停止服务并声明 应用程序是ANR。
https://developer.android.com/about/versions/oreo/background
https://stackoverflow.com/a/47611385/6059583点击此链接,显示如何显示运行服务 i 后台的通知