启动服务/前景服务(如果它在后台)正在将应用程序置于最前面

时间:2018-10-21 13:35:32

标签: android service foreground-service

一个简单的呼叫

Intent serviceIntent = new Intent(this, NotificationService.class); startService(serviceIntent);

在后台运行该应用程序,如果关闭该应用程序则什么也不会发生。我想避免这种行为,但是,我不知道该怎么做。 它发生在android O P 上。 我已经设置了alarmManager来在特定时间唤醒我的应用,然后pendingIntent启动了Activity(它在屏幕上不显示任何内容)并检查收到的操作从Intent中确定要执行的操作。我的应用程序中有2个服务,每当它们被唤醒时,它们都将应用程序置于前台,这对用户来说很烦人。

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
点击此链接,其中显示了如何显示在后台运行服务的通知