应用程序的目标是27,我正在测试Android oreo 8.0设备。
compileSdkVersion 27
targetSdkVersion 27
当用户点击下载按钮时,应用会启动前台意向服务,并通过通知通知用户。
在onCreate
的{{1}}内,app也履行了调用IntentService
方法的承诺。
所以,
startForeground(int id, Notification notification)
如果应用程序处于前台,一切都很完美。但是当用户刷掉并因此杀死应用程序时;我重新启动下载并运行,下载开始;但android系统会显示通知 - “<#appname#>正在后台运行”。 所以用户现在可以看到两个通知
这样好吗? 如何避免来自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创建新通知。
答案 0 :(得分:0)
来自Android文档
前景 前台服务执行一些对用户来说很明显的操作。例如,音频应用程序将使用前台服务来播放音轨。前台服务必须显示通知。即使用户未与应用程序交互,前台服务也会继续运行。
https://developer.android.com/guide/components/services.html
如果未正确启动通知,则该服务将被终止。也许您正在寻找不同类型的服务。也许看一下绑定服务?
绑定当应用程序组件绑定到服务时绑定服务 调用bindService()。绑定服务提供客户端 - 服务器 允许组件与服务交互的接口,发送 请求,接收结果,甚至跨进程使用 进程间通信(IPC)。绑定服务只运行 另一个应用程序组件绑定到它。多个组件可以 立即绑定到服务,但当所有这些服务解除绑定时,服务 被毁了。