gpt4 book ai didi

android - 从 onDestroy() 调用的 stopForeground(true) 不会删除通知

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:13 33 4
gpt4 key购买 nike

我想在我的前台服务被销毁后删除一个通知。我尝试从 onDestroy()unbind() 调用 stopForeground(true)。尽管调用了 onUnbind() 和 onDestroy()(我可以从日志中看到)通知仍然存在。我通过从我的 Activity 中调用 unbindService(playerConnection)stopService(this) 来停止服务。

为什么这样不行?关于如何在服务被破坏时删除通知有什么想法吗?

更新:我在玩弄通知时注意到一件有趣的事。我在服务中做了一个特殊的方法:

fun hideNotification() {
stopForeground(true)
Log.d("PlayerService", "hideNotification")
}

然后我在按下按钮时从我的 Activity 中调用它。它删除了通知。但是从 Activity 的 onStop() 或服务的 onUnbind() 或 onDestroy() 调用的相同函数不会。我无法理解这些情况之间的区别。

最佳答案

我在尝试停止前台服务并删除所有通知时遇到了同样的问题。

作为解决方法,我删除通知 channel 并在需要时重新创建。

对我来说解决它的方法如下:

  1. 在 onStartCommand() 中(或服务中的其他地方)从其中停止服务。
  2. 停止前景(真)
  3. 删除通知 channel (这实际上清除了所有通知)。

例子:

override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
var stopService : Boolean # Service stop condition
var isRunning : Boolean # stopSelf() raise exception if service is not running.
if (stopService}){
stopForeground(true)
notificationManager.deleteNotificationChannel("channel_id");
if (isRunning){
Log.d(TAG, "Service is running, stopping.")
stopSelf()
}else
Log.d(TAG, "Service is not running, no need to stop.")
return START_NOT_STICKY
}

一些引用资料:
How to remove old notification channels?
What is the proper way to stop a service running as foreground

关于android - 从 onDestroy() 调用的 stopForeground(true) 不会删除通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43669965/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com