Android oreo - 前景服务一旦app被杀死android显示通知

时间:2018-02-22 07:32:15

标签: android android-8.0-oreo android-intentservice android-8.1-oreo

应用程序的目标是27,我正在测试Android oreo 8.0设备

compileSdkVersion 27
targetSdkVersion 27

当用户点击下载按钮时,应用会启动前台意向服务,并通过通知通知用户。 在onCreate的{​​{1}}内,app也履行了调用IntentService方法的承诺。 所以,

startForeground(int id, Notification notification)

如果应用程序处于前台,一切都很完美。但是当用户刷掉并因此杀死应用程序时;我重新启动下载并运行,下载开始;但android系统会显示通知 - “<#appname#>正在后台运行”。 所以用户现在可以看到两个通知

  • 一个来自我的应用程序,显示下载进度和
  • 来自android系统的另一个,显示我的应用程序在后台运行。

这样好吗? 如何避免来自android系统的通知?

以下是我管理滑动app kill的方法:

//On click of download button
ContextCompat.startForegroundService(context, intent);

//Within the onCreate() of IntentService()
startForeground(id, notification);

然后在@Override public void onTaskRemoved(Intent rootIntent) { Context localContext = getApplicationContext(); Intent restartServiceIntent = new Intent(localContext, HandlePendingDownload.class); restartServiceIntent.putExtra(DMConstants.ACTION_SWIPE_OUT, Boolean.TRUE); restartServiceIntent.setPackage(getPackageName()); PendingIntent restartServicePendingIntent = PendingIntent.getBroadcast( localContext, 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT); AlarmManager alarmService = (AlarmManager) localContext .getSystemService(Context.ALARM_SERVICE); if (FWCompat.isKitKat_19_OrNewer()) { alarmService.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1900, restartServicePendingIntent); } else { alarmService.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1900, restartServicePendingIntent); } super.onTaskRemoved(rootIntent); } 内,我打电话给:

onReceive()

总结一下, 一旦应用程序被杀死如何避免Android系统显示的通知,该应用程序是在后台运行?因为我已经向用户显示下载通知,所以用户知道这一点。

还有一个问题,是否有办法获得ContextCompat.startForegroundService(context, downloadIntent); onCreate()的意图? 我需要获取下载内容的ID,该内容在intent中作为额外的参数传递。基于此原因,我可以在IntentService

中显示通知

截至目前,我正在显示一个“开始下载”通知,然后在onCreate()我清除该通知并根据内容ID创建新通知。

1 个答案:

答案 0 :(得分:0)

来自Android文档

  

前景   前台服务执行一些对用户来说很明显的操作。例如,音频应用程序将使用前台服务来播放音轨。前台服务必须显示通知。即使用户未与应用程序交互,前台服务也会继续运行。

https://developer.android.com/guide/components/services.html

如果未正确启动通知,则该服务将被终止。也许您正在寻找不同类型的服务。也许看一下绑定服务?

  

绑定当应用程序组件绑定到服务时绑定服务   调用bindService()。绑定服务提供客户端 - 服务器   允许组件与服务交互的接口,发送   请求,接收结果,甚至跨进程使用   进程间通信(IPC)。绑定服务只运行   另一个应用程序组件绑定到它。多个组件可以   立即绑定到服务,但当所有这些服务解除绑定时,服务   被毁了。