更新现有通知的方法?

时间:2016-08-05 12:17:19

标签: java android notifications

您好我希望通知行为如下:

当我的应用程序没有单一通知时,应该创建一个,但是当托盘中已经有通知时,我想更新通知的数据。

我可以获得当前通知或其他任何方式吗?

此外,我有一种用于通知的UI +数据,在特定事件发生时会频繁触发。

e.g。如果应用程序每5分钟收到一条关于匹配分数的消息,那么应该根据收到的最后一条消息更新当前通知,不应该有每条分数更新消息的通知。

我的代码如下:

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
        Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.putExtra(Constants.SOME_DATA, someData);

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
        PendingIntent.FLAG_UPDATE_CURRENT);

Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.icon)
        .setContentTitle(title)
        .setContentText(messageBody)
        .setAutoCancel(true)
        .setSound(defaultSoundUri)
        .setContentIntent(pendingIntent);

NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());

2 个答案:

答案 0 :(得分:0)

如果您希望永久运行单个通知并更新该通知,则必须使用startForeground(NOTIFICATION_ID, notification);创建前台通知 而且您可以使用相同的NOTIFICATION_ID来更新通知,其中您的案例是0 / *通知ID * /或者如果您想要简单通知,请使用相同NOTIFICATION_ID更新您的通知并保留{{1你未决的意图

答案 1 :(得分:0)

设置标记.setOngoing(true)并始终使用相同的notification id.0.它将更新您当前的通知。

试试这个演示

public class MainActivity extends Activity {

    private ImageView ImageButton;
    int value;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageButton = (ImageView) findViewById(R.id.imageButton);
        ImageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                value++;
                UpdateNow(value + "");
            }
        });
    }

    void UpdateNow(String msg) {
        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("asd")
                .setContentText(msg)
                .setSound(defaultSoundUri)
                .setOngoing(true)
                .setContentIntent(null);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }
}