滑动解雇服务通知

时间:2014-12-16 11:42:52

标签: android service notifications android-notifications

认为这根本不是问题,但仍然存在。 无论我做什么,我的服务通知都不想轻扫。

我有一个进度通知,它是使用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) - 正确删除了通知。

任何人都有任何想法,我在这里做错了什么?

3 个答案:

答案 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标志将阻止通知消失。您不会看到通知消失,并在解雇第一个通知后重新出现。