Android:当您的应用在后台运行时,在通知上使用AUTO-CANCEL

时间:2013-04-23 21:58:12

标签: java android notifications

我在这里查看了所有其他AUTO-CANCEL无法解决的问题,而且它们似乎都涉及到我没有犯的错误。我试过了两个

builder.setAutoCancel(true);

Notification notif = builder.build();
notif.flags |= Notification.FLAG_AUTO_CANCEL;

都没有效果。

我正在使用NotificationCompat,因为我的最小API是8.这是我的完整代码。在这个特定的通知中,我没有调用意图,因为我不需要用户做任何事情。

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentTitle(getString(R.string.app_name) + ": my title");
builder.setContentText(message);
builder.setSmallIcon(R.drawable.notification_icon);

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.prog_icon);
builder.setLargeIcon(bitmap);

builder.setAutoCancel(true); // dismiss notification on user click

NotificationManager notiManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notiManager.notify(MY_NOTI_MANAGER_ID, builder.build());

通知显示完美。您可以滑动以清除它。但只是点击它并不会忽略通知。它只是点亮并留在那里。

我的代码和其他人之间的一些可能的差异'贴在这里: 1)我正在使用NotificationCompat(这不应该有所作为,但我们之前已经听过)。 2)由于我的通知很简单,我没有附加意图。

如果您有任何见解,请与我们联系。

编辑:我的目的是在不预览背景应用程序的情况下解除通知。

3 个答案:

答案 0 :(得分:28)

显然你需要一个未决的意图。

Android - notification manager, having a notification without an intent,我找到了一个解决方案,它将当前活动的应用程序作为您的待处理意图(这样您就不必开始自己的活动来解除通知)。

我刚刚添加了以下两行代码(在设置自动取消后右侧):

PendingIntent notifyPIntent = 
    PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0);     
builder.setContentIntent(notifyPIntent);

效果很好。我会说,如果您不希望由于用户点击您的通知而重新启动您的活动,那么这是您的最佳选择。

答案 1 :(得分:6)

您似乎错过了PendingIntentsetContentIntent()来电。我认为这是自动取消工作所必需的。

以下是一些Notification - 显示来自this sample project的逻辑:

  private void raiseNotification(Intent inbound, File output, Exception e) {
    NotificationCompat.Builder b=new NotificationCompat.Builder(this);

    b.setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
     .setWhen(System.currentTimeMillis());

    if (e == null) {
      b.setContentTitle(getString(R.string.download_complete))
       .setContentText(getString(R.string.fun))
       .setSmallIcon(android.R.drawable.stat_sys_download_done)
       .setTicker(getString(R.string.download_complete));

      Intent outbound=new Intent(Intent.ACTION_VIEW);

      outbound.setDataAndType(Uri.fromFile(output), inbound.getType());

      b.setContentIntent(PendingIntent.getActivity(this, 0, outbound, 0));
    }
    else {
      b.setContentTitle(getString(R.string.exception))
       .setContentText(e.getMessage())
       .setSmallIcon(android.R.drawable.stat_notify_error)
       .setTicker(getString(R.string.exception));
    }

    NotificationManager mgr=
        (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

    mgr.notify(NOTIFY_ID, b.build());
  }

答案 2 :(得分:4)

海亲朋友,如果你想展示不可取消的     特定用户的通知(不可取消用户)     时间和之后,你需要清除它(如音乐播放器),你可以使用它。

mNotificationBuilder .setSmallIcon(android.R.drawable.btn_plus);
mNotificationBuilder .setContentTitle("My notification");
mNotificationBuilder .setContentText("Notificattion From service");
mNotificationBuilder .setLights(0xFF0000FF, 500, 500);

Notification note = mNotificationBuilder.build();  
note.flags = Notification.FLAG_ONGOING_EVENT; // For Non cancellable notification
mNotificationManager.notify(NOTIFICATION_ID, note);