2015-01-16 2 views
1

Для моего приложения я использую один идентификатор уведомления, чтобы не загромождать Меню уведомлений пользователя. Каждое из моих уведомлений содержит текст тикера. Когда из моего приложения нет уведомлений, и пользователь получает уведомление, отображается текст тикера. Когда уведомление уже существует и просто обновляется, текст тикера не отображается.Как обновить текст тикера?

Я сделал работу, которая очень халатная, где я отменяю уведомление до того, как я уведомию об этом, но это в конечном счете вызывает очень очевидное отставание от вибраций.

В настоящее время, как у меня есть уведомления происходит:

mBuilder.setSmallIcon(R.drawable.actionbar_logo) 
      .setContentTitle(extras.getString("title")) 
      .setContentText(extras.getString("summary")) 
      .setAutoCancel(true) 
      .setStyle(new NotificationCompat.BigTextStyle() 
          .bigText(extras.getString("extended_text")) 
      ) 
      .setLights(Color.WHITE, NOTIF_LIGHT_INTERVAL, NOTIF_LIGHT_INTERVAL) 
      .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE); 

    Intent intent = new Intent(this, MainActivity.class); 
    intent.putExtra("mainActivityNotification", true); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 424242, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    mBuilder.setContentIntent(contentIntent); 

    final Notification notification = mBuilder.build(); 
    notification.tickerText = extras.getString("title") + "\n" + 
           extras.getString("summary") + "\n" + 
           extras.getString("post_body"); 

    mNotificationManager.notify(GATE_NOTIFICATION_ID, notification); 
+0

Вы, наверное, баловаться с 'PendingIntent's, но для тех, кто сможет ответить на вопрос, который вы должны предоставить минимальный соответствующий код. – ozbek

+0

Обновлено родительское – David

+2

Глядя на ответ здесь http://stackoverflow.com/a/16435330/2841101. В нем говорится, что в следующий раз вы должны использовать один и тот же строитель. И используя этот строитель, вы просто обновляете тикер-текст. –

ответ

3

Android не отображает текст тикер снова, если она такая же, как и раньше.

Вы можете использовать setTicker API из Notification.Builder класса вместо построения текста тикер с использованием Notification объекта, так как Notification.Builder было добавлено, чтобы сделать его проще построить Notifications.

И если ваши намерения является повторно отобразить тот же текст тикера (от ранее размещенного уведомления), то просто добавьте эту строку:

mNotificationManager.notify(GATE_NOTIFICATION_ID, mBuilder.build()); 

После отправил свое первое уведомление.

Таким образом, ваш полный код выглядит, как показано ниже:

mBuilder.setSmallIcon(R.drawable.actionbar_logo) 
      .setContentTitle(extras.getString("title")) 
      .setContentText(extras.getString("summary")) 
      .setAutoCancel(true) 
      .setStyle(new NotificationCompat.BigTextStyle() 
          .bigText(extras.getString("extended_text")) 
      )  //consider using setTicker here 
      .setLights(Color.WHITE, NOTIF_LIGHT_INTERVAL, NOTIF_LIGHT_INTERVAL) 
      .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE); 

    Intent intent = new Intent(this, MainActivity.class); 
    intent.putExtra("mainActivityNotification", true); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 424242, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    mBuilder.setContentIntent(contentIntent); 

    final Notification notification = mBuilder.build(); 

    //consider using setTicker of Notification.Builder 
    notification.tickerText = extras.getString("title") + "\n" + 
           extras.getString("summary") + "\n" + 
           extras.getString("post_body"); 

    mNotificationManager.notify(GATE_NOTIFICATION_ID, notification); 
    //second time onward, add your changed content like setContentText, setTicker etc. 
    mNotificationManager.notify(GATE_NOTIFICATION_ID, mBuilder.build()); 
Смежные вопросы