1

大多数熟悉 Notification 和 PendingIntent API 的人都知道 setLatestEventInfo 现在已被弃用。

因此,我试图替换我现有的代码(取决于不推荐使用的方法):

    Context context = getApplicationContext();
    Intent activityIntent = new Intent(context, Activity.class);
    activityIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    Notification notification = new Notification(R.drawable.icon, getString(R.string.notify),System.currentTimeMillis());
    PendingIntent startIntent = PendingIntent.getActivity(context, 0, activityIntent, 0);
    notification.setLatestEventInfo(context, getString(R.string.notify), getString(R.string.notifysummary), startIntent);
    this.startForeground(1234,notification);

正如您可能猜到的,我是从后台运行的服务内部调用它的。当服务启动时,它会弹出通知。这是一个持续的、持续的通知,它会将活动“Activity.class”放在前面以防它存在,并创建一个新的活动实例以防它同时被杀死。工作正常,没有任何问题。

现在,想要迁移到更新的 API 级别,我试图用以下NotificationBuilder示例替换上面的代码:

        Context context = getApplicationContext();
        Intent activityIntent = new Intent(context, Activity.class);            
        activityIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent startIntent = PendingIntent.getActivity(context, 0, activityIntent,  Intent.FLAG_ACTIVITY_SINGLE_TOP);
        Notification notification = new Notification.Builder(context).setSmallIcon(R.drawable.ic_launcher).setContentText("App running").setContentTitle("My app").setOngoing(true).setAutoCancel(false).setContentIntent(startIntent).build();
        this.startForeground(1234,notification);

但是点击通知没有任何效果。但是,我已经尝试过“Intent.FLAG_ACTIVITY_NEW_TASK”,因为文档说我应该这样做。即使活动已经在顶部,这也会创建一个新任务,这与文档所说的相反:PendingIntentFLAG_ACTIVITY_NEW_TASK

有没有人遇到同样的问题?如何构造一个在单击时不会关闭的持久通知,并将活动置于堆栈上的某个位置,否则会创建它的新实例?

谢谢你的帮助。

4

1 回答 1

2

这是不正确的:

PendingIntent startIntent = PendingIntent.getActivity(context, 0, activityIntent,  Intent.FLAG_ACTIVITY_SINGLE_TOP);

您正在将Intent标志传递给getActivity(). 第 4 个参数用于getActivity()获取PendingIntent标志,例如:

  • PendingIntent.FLAG_CANCEL_CURRENT
  • PendingIntent.FLAG_NO_CREATE
  • PendingIntent.FLAG_ONE_SHOT
  • PendingIntent.FLAG_UPDATE_CURRENT

Intent.FLAG_ACTIVITY_SINGLE_TOP作为第四个参数传递。该常量实际上具有值 0x20000000。巧合的是,PendingIntent.NO_CREATE它的值也是 0x20000000,所以你所做的和这个是一样的:

PendingIntent startIntent = PendingIntent.getActivity(context, 0, activityIntent,  PendingIntent.NO_CREATE);

那是你的问题。

只需将第四个参数设置为getActivity()to 0,就像在您的原始代码中一样。

于 2013-07-25T08:38:30.660 回答