认为这根本不是问题,但仍然存在。 无论我做什么,我的服务通知都不想轻扫。
我有一个进度通知,它是使用startForeground(id,Notification)在服务中启动的。 以下是我如何构建它:
public Notification createErrorNotification(String message) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());
Intent showAppIntent = new Intent(getApplicationContext(), MainActivity.class);
showAppIntent.setAction(Intent.ACTION_MAIN);
showAppIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent pendingShowAppIntent = PendingIntent.getActivity(getApplicationContext(), 10,
showAppIntent, PendingIntent.FLAG_CANCEL_CURRENT);
builder.setContentTitle(getString(R.string.label_download_error))
.setWhen(0)
.setContentText(message)
.setContentIntent(pendingShowAppIntent)
.setAutoCancel(true)
.setOngoing(false)
.setSmallIcon(R.drawable.ic_launcher);
return builder.build();
}
如果发生错误,我会在某些时候将进度通知替换为所描述的错误通知,禁用“正在进行”和其他内容。 我也完全停止服务:
private void stopService() {
stopSelf();
taskThread.stopLooper();
downloadHandler.stopExecution();
downloadHandler = null;
taskThread = null;
}
并致电
stopForeground(false);
false - 因为我希望将通知保留在屏幕上并被用户解雇。 但刷卡解雇根本不起作用。
如果我调用stopForeground(true) - 正确删除了通知。
任何人都有任何想法,我在这里做错了什么?
答案 0 :(得分:4)
正如@orium建议的那样,要解决此问题,您需要在前台模式中停止服务,删除通知,并使用相同的ID创建新通知,但设置设置为不允许。 那将是: stopForegound(真) 并使用setAutoCancel(true)
创建通知答案 1 :(得分:0)
您可以使用通知ID为0来通知,在这种情况下,将会停止通知的删除待处理意图。
答案 2 :(得分:0)
删除通知是不必要的。您可以使用以下命令将其与服务分离:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
stopForeground(STOP_FOREGROUND_DETACH);
else
stopForeground(false);
如果您需要更新任何信息,则可以使用通知管理器再次使用相同的ID通知。在以后的Android版本上销毁服务时,STOP_FOREGROUND_DETACH标志将阻止通知消失。您不会看到通知消失,并在解雇第一个通知后重新出现。