我有一个在通知栏上显示通知的活动。如果用户按主页按钮进入后台,我会保留通知(这就是我需要的),但是当用户关闭应用程序时,我需要取消通知,这就是我的问题。
- 我试图取消 onDestroy 上的通知,但它没有被解雇。
- 我试图为通知设置 setOngoing true 。
我该怎么办?每次用户进入后台然后关闭应用程序时,我都需要从通知栏中删除通知,但如果用户将应用程序保持在后台,我需要通知。
我有一个在通知栏上显示通知的活动。如果用户按主页按钮进入后台,我会保留通知(这就是我需要的),但是当用户关闭应用程序时,我需要取消通知,这就是我的问题。
我该怎么办?每次用户进入后台然后关闭应用程序时,我都需要从通知栏中删除通知,但如果用户将应用程序保持在后台,我需要通知。
您在创建通知时有一个 ID,对吗?
然后,您所要做的就是使用该 ID 取消它。
例如:
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.cancel(4);
当他们退出您的应用程序或您在活动中调用 finish() 时,on destroy 会被触发。
我创建了一个永远运行的异步任务,现在当我从最近的列表中删除应用程序时,会调用 onDestroy。
如果我们在 onTaskRemoved() 方法中取消通知,可以取消通知,在该方法中执行 mNotificationManager.cancel(NOTIFICATION_ID) ,因为不是每次都调用 onDestroy 方法。它对我来说很好。
你需要创建一个服务,然后Override
这个方法;并确保复制与onCreate
方法相同,因为关闭时服务可能会重新启动。
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();
}
解决这个问题可能听起来很奇怪,但它对我有用,并且适用于所有版本的 android。如果您在应用程序的任何地方都有游标加载器,则每次关闭应用程序时都会调用 onLoaderReset 方法。
@Override
public void onLoaderReset(Loader<Cursor> loader) {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();
myRecyclerAdapter.swapCursor(null);
}