6

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

  • 我试图取消 onDestroy 上的通知,但它没有被解雇。
  • 我试图为通知设置 setOngoing true 。

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

4

5 回答 5

2

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

然后,您所要做的就是使用该 ID 取消它。
例如:

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

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

于 2013-08-30T16:29:00.183 回答
1

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

于 2015-11-10T11:53:43.557 回答
0

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

于 2016-06-22T06:15:04.800 回答
0

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

@Override 
public void onTaskRemoved(Intent rootIntent) {
    super.onTaskRemoved(rootIntent);
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.cancelAll();
}
于 2016-08-03T01:28:30.607 回答
0

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

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

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

    myRecyclerAdapter.swapCursor(null);

}
于 2019-03-04T11:22:00.330 回答