Android应用程序强制关闭后通知显示

时间:2014-02-09 03:22:38

标签: android notifications

我今天用谷歌搜索了这个不停,但找不到任何东西。我的方案如下:

我有一个自动回复收到消息的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;
}

我的目标如下:

如果应用程序被强制关闭等,我很乐意简单地销毁通知,或者如果可能的话我不介意该应用程序是一项服务,所以即使从最近一次刷卡,它仍然会运行。然而,最好的情况是,当我的广播接收器正在运行时(以某种方式检测它何时实际工作)以及何时打开,显示通知。每当它不运行时,应该擦除通知。如果需要更多代码等,只需评论,感谢任何帮助人员。

4 个答案:

答案 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)”方法中取消通知。