如何在onDestroy函数中取消通知

时间:2014-04-24 06:44:40

标签: 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", 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);

我将该代码放在public void onCreate(Bundle savedInstanceState)中... 所以,当我点击或滑动时,通知无法取消。 当我关闭我的应用程序时,通知仍然存在。 那么我有一个想法来使用这段代码:

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

但是,这个函数从未调用过???

关闭应用时如何取消通知?

3 个答案:

答案 0 :(得分:2)

可能是因为当您使用主页按钮导航时不会立即调用onDestroy。

Android提供的回调方法可以很好地处理通知等问题。 这些名为onUserLeaveHint()onUserInteraction()

onUserLeaveHint()的JavaDoc声明:

  

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

     

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

我想你会想要覆盖其中任何一个;特别是onUserLeaveHint()似乎是一个很好的选择。

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

您无法拦截强制关闭的事件'申请程序。 Android并不支持此功能。当用户执行此操作时,系统将调用Process.killProcess(int pid)并释放所有资源。在进程真正被杀死之前,它无法捕获此事件并执行任务。也许解决方法是可行的,但它不会是Android想要的。

答案 1 :(得分:0)

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

  

在某些情况下,系统会在不调用此方法(或其他任何方法)的情况下简单地终止活动的托管过程,因此不应将其用于执行过程后保留的内容走了。

答案 2 :(得分:-1)

你错过了super.onDestroy

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