2014-10-09 3 views
1

Я пытаюсь реализовать уведомление InboxStyle в своем приложении, чтобы люди увидели все свои последние уведомления, но я не могу найти способ обновить последнее уведомление, он просто перезаписывается с помощью новый, даже если я использую тот же NOTIF_ID.Обновление уведомлений InboxStyle с новой строкой

Мой реальный код:

private void sendNotification(String notif, String[] args) { 
    NotificationManager mNotificationManager = (NotificationManager) 
      this.getSystemService(Context.NOTIFICATION_SERVICE); 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, main_activity.class), 0); 


    if (notif.equals("NOTIF_0")){ 
     notif = String.format(getString(R.string.NOTIF_0), args[0]); 
    } else if (notif.equals("NOTIF_1")) { 
     notif = String.format(getString(R.string.NOTIF_1), args[0]); 
    } else if (notif.equals("NOTIF_2")) { 
     notif = String.format(getString(R.string.NOTIF_2), args[0]); 
    } else if (notif.equals("NOTIF_2_EX")) { 
     notif = String.format(getString(R.string.NOTIF_2_EX), args[0], args[1], args[2]); 
    } else if (notif.equals("NOTIF_3")) { 
     notif = String.format(getString(R.string.NOTIF_3), args[0]); 
    } else if (notif.equals("NOTIF_3_EX")) { 
     notif = String.format(getString(R.string.NOTIF_3_EX), args[0], args[1], args[2]); 
    } else if (notif.equals("NOTIF_3_EX_DIS")) { 
     notif = String.format(getString(R.string.NOTIF_3_EX_DIS), args[0], args[1], args[2]); 
    } else if (notif.equals("NOTIF_4")) { 
     notif = String.format(getString(R.string.NOTIF_4), args[0]); 
    } else if (notif.equals("NOTIF_5")) { 
     notif = String.format(getString(R.string.NOTIF_5), args[0]); 
    } else if (notif.equals("NOTIF_5_EX")) { 
     notif = String.format(getString(R.string.NOTIF_5_EX), args[0], args[1], args[2]); 
    } else if (notif.equals("NOTIF_6_EX")) { 
     notif = String.format(getString(R.string.NOTIF_6_EX), args[0], args[1]); 
    } else if (notif.equals("NOTIF_31")) { 
     notif = String.format(getString(R.string.NOTIF_31), args[0]); 
    } 

    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); 
    inboxStyle.addLine(notif); 

    NotificationCompat.Builder mBuilder = 
     new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setAutoCancel(true) 
       .setContentTitle(getString(R.string.app_name)) 
       .setContentText(notif); 

    mBuilder.setStyle(inboxStyle); 
    mBuilder.setContentIntent(contentIntent); 

    Notification notification = mBuilder.build(); 

    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notification.flags |= Notification.FLAG_SHOW_LIGHTS; 
    notification.defaults |= Notification.DEFAULT_SOUND; 
    notification.defaults |= Notification.DEFAULT_LIGHTS; 
    notification.defaults |= Notification.DEFAULT_VIBRATE; 
    notification.ledARGB = 0xff00ff00; 
    notification.ledOnMS = 300; 
    notification.ledOffMS = 1000; 
    notification.flags |= Notification.FLAG_SHOW_LIGHTS; 

    mNotificationManager.notify(1, notification); 
} 

Дополнительные вопросы: Есть ли способ, чтобы отобразить только последние 5 уведомлений (новое одно и 4 новее от последнего уведомления)? Я также ищу способ отображения BigView вместо InboxStyle, но только при наличии только одного уведомления, в противном случае уведомление должно отображаться в виде списка, можно ли увидеть уведомление с тем же идентификатором? и загружать тот или иной стиль на основе этой проверки? Невозможно найти информацию об этом в Интернете.

ответ

0

Удалось сделать в уродливом виде на данный момент. Я сохраняю последние уведомления в SQLite DB, извлекаю их в любое время и создаю обновленное уведомление. Я очищаю БД при запуске приложения, так что в следующий раз у пользователя будет только новое уведомление.

Я не знаю, является ли это лучшим решением, но я не могу найти какой-либо API для доступа к старому уведомлению для получения информации из него, поэтому я внедрил это решение.

Смежные вопросы