【问题标题】:Cancel notification after application is closed from background从后台关闭应用程序后取消通知
【发布时间】:2019-03-04 19:22:00
【问题描述】:

我有一个在通知栏上显示通知的活动。如果用户按主页按钮进入后台,我会保留通知(这就是我需要的),但是当用户关闭应用程序时,我需要取消通知,这就是我的问题。

  • 我尝试取消 onDestroy 上的通知,但没有触发。
  • 我尝试为通知设置 setOngoing true。

我该如何处理?每次用户进入后台然后关闭应用程序时,我都需要从通知栏中删除通知,但如果用户将应用程序保持在后台,我需要通知。

【问题讨论】:

标签: android android-notifications android-lifecycle


【解决方案1】:

您在创建通知时有一个 ID,对吧?

那么您所要做的就是使用该 ID 取消它。
例如:

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.cancel(4);

当他们退出您的应用或您在活动上调用 finish() 时会触发 on destroy。

【讨论】:

  • onDestroy 不会每次都被调用。是否调用它取决于android系统。当调用 onDestroy 时,我正在使用这个代码来取消通知,但不是每次都调用它。我还能做什么?
  • 为什么不使用onPause
  • 当你在一个活动上调用完成时,每次都会调用 onDestroy
  • @kabuto178 onPause 每次用户离开活动时都会调用它,因为它是点击主页按钮或退出应用程序。因此,如果他在 onPause 中取消他的通知,那么当用户点击主页按钮时它将被取消,这是他不希望发生的事情
  • 这不是一个正确的退出吗?当我这样做时,我的所有活动线程都会停止。没有任何方法可以检查这种行为?
【解决方案2】:

我创建了一个永远运行的异步任务,现在当我从最近列表中删除应用程序时,会调用 onDestroy。

【讨论】:

  • 你在异步任务中写了什么能发一下吗?
  • 是的,让我们看看这可能很有趣的代码..:)
  • 永远运行 :O :O :O 这就是 Android 团队提出所有这些打盹模式、服务限制等的原因。
【解决方案3】:

如果我们在 onTaskRemoved() 方法中取消通知,可以取消通知,在该方法中执行 mNotificationManager.cancel(NOTIFICATION_ID),因为不是每次都调用 onDestroy 方法。对我来说效果很好。

【讨论】:

    【解决方案4】:

    你需要创建一个服务,然后Override这个方法;并确保复制与onCreate 方法相同,因为关闭时服务可能会重新启动。

    @Override 
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancelAll();
    }
    

    【讨论】:

    【解决方案5】:

    解决这个问题可能听起来很奇怪,但它对我有用,并且适用于所有版本的 android。如果您在应用程序的任何位置都有游标加载器,则每次关闭应用程序时都会调用 onLoaderReset 方法。

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
    
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancelAll();
    
        myRecyclerAdapter.swapCursor(null);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多