Java 如何在onDestroy函数中取消通知

Java 如何在onDestroy函数中取消通知,java,android,android-notifications,Java,Android,Android Notifications,我想做一个类似BBM连接的通知(适用于android)。。。 所以当我打开我的应用程序时,通知会出现,并且不能取消。。。 所以我使用这个代码 nm=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); Notification notification=new Notification(android.R.drawable.stat_notify_more, "this is important"

我想做一个类似BBM连接的通知(适用于android)。。。 所以当我打开我的应用程序时,通知会出现,并且不能取消。。。 所以我使用这个代码

    nm=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification=new Notification(android.R.drawable.stat_notify_more, "this is important", System.currentTimeMillis());
    notification.flags = notification.FLAG_NO_CLEAR;  //notification never dissapear
    Context context=MainActivity.this;
    CharSequence title="hello there";
    CharSequence detail="this is demo";
    Intent intent=new Intent(context,MainActivity.class);
    PendingIntent  pending=PendingIntent.getActivity(context, 0, intent, 0);
    notification.setLatestEventInfo(context, title, detail, pending);
    nm.notify(0, notification);
我在创建(Bundle savedInstanceState)时将该代码放在public void中。。。 因此,当我单击或滑动时,通知无法取消。 当我关闭应用程序时,通知仍然存在。 然后我有了一个使用此代码的想法:

@Override
protected void onDestroy() {
    nm.cancelAll();
}
但是,这个函数从未调用过


当我关闭应用程序时,如何取消通知?

您错过了super.ondestory

@Override
protected void onDestroy() {
    nm.cancelAll();
    super.onDestroy();
}

这可能是因为当您使用home按钮离开时,onDestroy不会立即被调用

Android提供了回调方法,可以很好地处理通知等。 它们被称为
onUserLeaveHint()
onUserInteraction()

onUserLeaveHint()的JavaDoc声明:

当活动即将启动时,作为活动生命周期的一部分调用 进入后台作为用户选择的结果。例如,当 用户按下Home键,将调用onUserLeaveHint(),但是 当来电导致通话中的活动中断时 自动带到前台,onUserLeaveHint()将不会 调用正在中断的活动。在调用时, 在活动的onPause()回调之前调用此方法

此回调和onUserInteraction()用于帮助活动 智能管理状态栏通知;特别是 帮助活动确定取消通知的适当时间

我想你会想要覆盖其中任何一个;特别是onUserLeaveHint()对于您的目的来说似乎是一个不错的选择

@Override
protected void onUserLeaveHint()
{
    nm.cancelAll();
    super.onUserLeaveHint();
}

您无法拦截“强制关闭”应用程序进程的事件。Android不支持这个。当用户这样做时,系统调用和所有资源将被释放。在进程真正终止之前,不可能捕获此事件并执行任务。也许有一种变通方法是可能的,但这不是Android想要的。

无法保证该方法会被调用。若应用程序并没有足够的内存,它可能会被操作系统杀死

在某些情况下,系统会简单地终止活动的宿主进程,而不在其中调用此方法(或任何其他方法),因此不应使用它来执行在进程结束后仍保留的操作


当我用硬方法关闭我的应用程序时,它仍然没有被调用,使用home按钮然后滑动应用程序…前面的答案有效,你的答案也有效,但我需要在应用程序关闭时取消,按home(主页)按钮或apps(应用程序)菜单,然后滑动应用程序以关闭它…如果您有多个活动,并且无论显示哪一个活动,通知都必须在那里,这将有点困难。当整个应用程序关闭时,没有真正的回调可用。不过,我找到了另一个选项,将用它更新我的答案。抱歉,这仍然不是我想要的答案…因为我想要一个在我使用任务管理器或硬关闭关闭关闭应用程序时运行的处理程序…您无法截获/捕获这些事件。系统将简单地终止应用程序进程,不再调用回调方法。onDestroy函数现在被调用,但当我使用硬方式关闭应用程序时,请按“应用程序”菜单按钮或按住“主页”按钮,然后滑动应用程序。此方法不称为onDestroy…当您按下home按钮时,应用程序不会被破坏,而是被最小化。因此,如果需要取消通知,请在调用onStop时执行此操作