更新现有通知

时间:2012-03-23 15:38:08

标签: java android

既然最新的Android SDK中不推荐使用setLatestEventInfo方法,我们是否应该更新现有通知的内容?我怀疑他们希望我们每次想要更新通知内容时都会创建新通知。

Notification Guide似乎尚未更新,无法使用建议的Notification.Builder课程。

2 个答案:

答案 0 :(得分:2)

Notification类中有许多公共字段可以直接更改,只需保留对它的引用即可。它的其他特征显然不是为了改变(如果通知发生重大变化,可能会使用户感到困惑)。

您需要使用已弃用的方法,或重建通知并显示新的通知。

http://developer.android.com/reference/android/app/Notification.html

答案 1 :(得分:0)

是的,您可以更新现有通知的内容。但是您已经使用相同的通知ID重建它。同时删除所有相关标志并将优先级设置为默认值。

相同的通知ID可确保不会创建新的通知ID。通知已经启动,振动和灯光等标志可能不合适。优先级设置为默认值,以便通知托盘中通知的位置不会更改。如果优先级设置为高,则它将移动到托盘的顶部。

以下是我的实施方式。 *我刚刚添加了相关代码

public void showNotification(String action){
    RemoteViews views = new RemoteViews(getPackageName(),
            R.layout.status_bar);
    Notification status;
    if(action.equals("play")){
        views.setImageViewResource(R.id.status_bar_play, R.drawable.play);
    status = notificationBuilder
            .setSmallIcon(R.drawable.ic_launcher)
            .setPriority(Notification.PRIORITY_HIGH)
            .setContentIntent(pendingIntent)
            .setContent(views)
            .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS)
            .build();
    } else {
        views.setImageViewResource(R.id.status_bar_play, R.drawable.pause);
        status = notificationBuilder
            .setSmallIcon(R.drawable.ic_launcher)
            .setPriority(Notification.PRIORITY_DEFAULT)
            .setContentIntent(pendingIntent)
            .setContent(views)
            .build();
    }
    NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(Constants.NOTIFICATION_ID, status);
}

这样可以修改现有通知的内容。