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