ListenableWorker 不会删除通知图标

Ser*_*rov 8 android android-notifications android-workmanager

我正在使用 ListenableWorker 来执行后台任务。我也希望操作系统意识到我的服务重要性,所以我打电话

 setForegroundAsync(new ForegroundInfo(WorkerConstants.NOTIFICATION_FOREGROUND_ID,
 builder.build()));
Run Code Online (Sandbox Code Playgroud)

正如谷歌文档中所建议的那样。

但是当我的服务停止或取消时,我仍然可以看到前台服务通知并且我无法删除它。

此外,我在此通知中添加了取消按钮,但它什么也没做,我无法关闭它:

PendingIntent intent = WorkManager.getInstance(getApplicationContext())
                            .createCancelPendingIntent(getId());
                    builder.addAction(R.drawable.ic_redesign_exit,"Stop",intent);
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Ser*_*rov 7

我向谷歌跟踪器提交了一个问题。并发现那完全是破旧的。

官方回应如下:

查看您的示例应用程序,您正在引入 CallbackToFutureAdaptor 返回的 ListenableFuture 完成与主循环程序之间的竞争。

即使不使用 REPLACE,在您的 Worker 标记为成功后,也会发布您的通知更新之一。

但是,您实际上可以通过等待对 setForegroundAsync() 的调用完成来避免竞争条件(因为它也返回一个 ListenableFuture)。一旦你这样做了 - 在你的 Worker 完成后,你永远不会收到通知。

我还将继续改进我们如何自动执行此操作,即使开发人员弄错了。

try {
    // This ensures that you waiting for the Notification update to be done.
    setForegroundAsync(createForegroundInfo(0)).get();
} catch (Throwable throwable) {
    // Handle this exception gracefully
    Log.e("FgLW", "Something bad happened", throwable);
}
Run Code Online (Sandbox Code Playgroud)