我今天用谷歌搜索了这个不停,但找不到任何东西。我的方案如下:
我有一个自动回复收到消息的Android应用。我有以下代码来创建持久(不可刷卡)通知,然后当通过onDestroy销毁应用程序时,通知将被删除。但是,当我打开最新面板并轻扫我的应用程序时,应用程序会停止自动回复服务并且广播接收器停止,但是不会调用onDestroy并且通知仍然可见。
public void notifCreate() {
Intent i = new Intent(Main.this, Main.class);
PendingIntent pi = PendingIntent.getActivity(Main.this, 1, i, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager notifManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder notifBuilder = new Notification.Builder(getApplicationContext());
notifBuilder.setContentTitle(getString(R.string.app_name));
notifBuilder.setContentText(getString(R.string.notification));
notifBuilder.setContentIntent(pi);
notifBuilder.setSmallIcon(R.drawable.ic_launcher);
notifBuilder.setOngoing(true);
Notification notif = notifBuilder.getNotification();
notifManager.notify(1, notif);
}
public void notifDestroy() {
NotificationManager notifManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notifManager.cancelAll();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
loadPrefs();
}
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
@Override
protected void onPause() {
super.onPause();
notifCreate();
}
@Override
protected void onResume() {
super.onResume();
loadPrefs();
checkStates();
notifDestroy();
}
@Override
public void onDestroy() {
super.onDestroy();
notifDestroy();
service = false;
}
我的目标如下:
如果应用程序被强制关闭等,我很乐意简单地销毁通知,或者如果可能的话我不介意该应用程序是一项服务,所以即使从最近一次刷卡,它仍然会运行。然而,最好的情况是,当我的广播接收器正在运行时(以某种方式检测它何时实际工作)以及何时打开,显示通知。每当它不运行时,应该擦除通知。如果需要更多代码等,只需评论,感谢任何帮助人员。
答案 0 :(得分:1)
据我所知,您正在创建一个新的NotificationManager对象来创建通知,而另一个notificationManager对象则用于取消通知。您应该使用相同的对象。你这样做的方式,你没有在notifDestroy()中使用该对象发出任何通知,因此它可能不会为你清除通知。
答案 1 :(得分:1)
您是否在通知中尝试.setAutoCancel(true)
,并在活动xml
android:launchMode="singleTask"
,android;clearTaskOnLauch="true"
您的通知图标应在通知栏上按下时清除。
答案 2 :(得分:1)
我从最近一次刷新应用程序时用来杀死进程的方法是:在应用程序的第一个活动中,在方法OnDestroy中我写了#34;进程必须杀死"。通过这种方式,我调用了进程的OnDestroy方法,因此进程真正杀死了自己,并且通知被删除了。 具体来说,在第一个活动中:
@Override
public void onDestroy() {
super.onDestroy();
Intent intent = new Intent();
intent.setAction(Service.MY_ACTION_FROMACTIVITY);
intent.putExtra(Service.CMD, Service.CMD_STOP);
sendBroadcast(intent);
}
所以以下操作是:
@Override
public void onDestroy() {
// TODO Auto-generated method stub
barNotification.cancel(NOTIFICATION);
sensorManager.unregisterListener(this);
this.unregisterReceiver(myServiceReceiver);
super.onDestroy();
}
我希望我可以帮助你。
答案 3 :(得分:1)
如果您的通知由服务处理且目标API为14或更高,则您有机会在覆盖“void onTaskRemoved(Intent rootIntent)”方法中取消通知。