应用程序从后台关闭后取消通知

时间:2013-08-30 16:27:22

标签: android android-notifications android-lifecycle

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

  • 我试图取消关于onDestroy的通知但是没有被解雇。
  • 我尝试为通知设置setOngoing为true。

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

5 个答案:

答案 0 :(得分:2)

创建时,您的通知是ID,对吗?

然后您只需使用该ID取消它 例如:

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.cancel(4);
当他们退出你的应用程序或你在活动上调用finish()时,

on destroy会被触发。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您需要创建一个服务,然后Override这个方法;并确保将{copy}复制到onCreate方法,因为该服务可能会在关闭时重新启动。

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

答案 4 :(得分:0)

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

@Override
public void onLoaderReset(Loader<Cursor> loader) {

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.cancelAll();

    myRecyclerAdapter.swapCursor(null);

}