我想发一个像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();
}
但是,这个函数从未调用过???
关闭应用时如何取消通知?
答案 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();
}