1

При отправке push-уведомления в список уведомлений/панели, .contentText и .number сначала не отображаются (индикаторы .ticker, .icon и .contentTitle) , Однако после отправки другого уведомления (с другим идентификатором), когда первый из них попадает в список, он отображает текст и номер контента. А затем в новом отсутствует текст и т. Д.NotificationManager.notify создание уведомлений, которые * изначально * отсутствуют contentText

Поскольку я использую миллисекундный таймер для создания уникального идентификатора, я не думаю, что для меня возможно как-то обновить предыдущую запись. Поэтому я должен сначала опубликовать его с чем-то неправильным, чтобы каким-то образом он пропускал текст, пока он не станет последним.

Проблема возникает только на некоторых устройствах - в основном на планшетах nexus (работает 4.2.2). На большинстве телефонов телефоны работают нормально. На любом данном устройстве он всегда работает или никогда не работает. В этом смысле это не прерывисто.

Вот код, который реагирует на нажатия и сообщения в центр уведомлений.

public class GcmBroadcastReceiver extends BroadcastReceiver { 
    static final String TAG = "GmcBroadcastReceiver"; 
    Context ctx; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); 
     ctx = context; 
     String messageType = gcm.getMessageType(intent); 
     if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) 
      Log.i(TAG, "PUSH RECEIVED WITH ERROR: " + intent.getExtras().toString()); 
     else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) 
      Log.i(TAG, "DELETED PUSH MESSAGE: " + intent.getExtras().toString()); 
     else 
     { 
      Log.i(TAG, "Received PUSH: " + intent.getExtras().toString()); 
      if (MyApp.isAppForeground == false) 
       postNotification(intent.getExtras()); 
     } 
     setResultCode(Activity.RESULT_OK); 
    } 

    // post GCM message to notification center. 
    private void postNotification(Bundle data) { 
    String msg = data.getString("alert"); 
    Log.i(TAG, "message: " + msg); 

    if (msg == null) // on app startup, this was always getting called with empty message 
     return; 

    int badge = Integer.parseInt(data.getString("badge","0")); 

    Intent intent = new Intent(ctx, WordChums.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, intent, 0); //, data); 

    Uri sound = Uri.parse("android.resource://com.peoplefun.wordchums/raw/push"); 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx) 
    .setSmallIcon(R.drawable.ic_stat_gcm) 
    .setContentTitle("Word Chums") 
    .setContentText(msg) 
    .setTicker(msg) 
    .setStyle(new NotificationCompat.BigTextStyle()) 
    .setAutoCancel(true) 
    .setOnlyAlertOnce(true) 
    .setSound(sound) 
    .setDefaults(Notification.DEFAULT_VIBRATE); 
    if (badge > 0) 
     builder.setNumber(badge); 

    builder.setContentIntent(contentIntent); 
    NotificationManager notificationManager = (NotificationManager)ctx.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify((int)System.currentTimeMillis(), builder.build()); 
    } 
} 

Записи журнала, которые печатаются, как ожидается.

I/GmcBroadcastReceiver(2081): Received PUSH: Bundle[{gm=37206155, collapse_key=do_not_collapse, alert=TestUser said: 'Message 1', sound=push, badge=6, from=550952899880, pfok=1, ct=1}] 
I/GmcBroadcastReceiver(2081): message: TestUser said: 'Message 1' 
I/GmcBroadcastReceiver(2081): Received PUSH: Bundle[{gm=37206155, collapse_key=do_not_collapse, alert=TestUser said: 'Message 2', sound=push, badge=6, from=550952899880, pfok=1, ct=1}] 
I/GmcBroadcastReceiver(2081): message: TestUser said: 'Message 2' 
I/GmcBroadcastReceiver(2081): Received PUSH: Bundle[{gm=37206155, collapse_key=do_not_collapse, alert=TestUser said: 'Message 3', sound=push, badge=6, from=550952899880, pfok=1, ct=1}] 
I/GmcBroadcastReceiver(2081): message: TestUser said: 'Message 3' 
+0

http://developer.android.com/guide/topics/ui/notifiers/notifications.html –

+0

Принудительное преобразование long в int всегда будет иметь тот же int overflow. Поскольку 'System.currentTimeMillis()' длиной 14 длин. 'SystemClock.currentTimeMillis()', это время, когда поток работает в миллисекундах. Это намного меньше. –

ответ

4

Возможно, ваш контент-текст не отображается на устройствах, поддерживающих стиль большого текста, и это связано с тем, что вы устанавливаете стиль BigTextStyle без установки большого текста.

Вместо

.setStyle(new NotificationCompat.BigTextStyle())

Вы должны попробовать

.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))

Это объясняет, почему на некоторых устройствах не сталкиваются с проблемой:

NotificationCompat. BigTex tStyle

Класс помощника для генерации широкоформатных уведомлений, содержащих много текста. Если платформа не предоставляет широкоформатные уведомления, этот метод не имеет эффекта. Пользователь всегда будет видеть нормальное уведомление.

И это объясняет, почему на некоторых устройствах вы:

общественного NotificationCompat.BigTextStyle bigText (CharSequence cs)

Укажите текст, который будет отображаться в большой форме шаблона вместо текста с текстом.

Цитаты взяты с here.

+0

Да, меняя эту линию, она точно фиксировала ее. На устройстве, поддерживающем большой стиль *, и когда уведомление находится поверх *, оно отображает bigText * вместо * contentText. – leontx

2
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
.setSmallIcon(R.drawable.notification_icon) 
.setContentTitle("Event tracker") 
.setContentText("Events received") 

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

String[] events = new String[6]; 
// Sets a title for the Inbox style big view 
inboxStyle.setBigContentTitle("Event tracker details:"); 
... 
// Moves events into the big view 
for (int i=0; i < events.length; i++) { 

    inboxStyle.addLine(events[i]); 
} 
// Moves the big view style object into the notification object. 
mBuilder.setStyle(inBoxStyle); 
... 
// Issue the notification here. 

См Android Notification

+0

Я не пробовал этот код, но это, возможно, сработало (+1). Но однократное изменение Эрана было кратким исправлением. – leontx

1

Проверка на поле сбщ, сохраняя syso или при отладке я думаю, что это может быть пустой строкой вы получаете

(или)

Try этот код наверняка работает для вас, а также для отображения нескольких уведомлений

NotificationCompat.Builder nBuilder; 
    Uri alarmSound = RingtoneManager 
      .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    nBuilder = new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("Kluebook - " + keys) 
      .setLights(Color.BLUE, 500, 500).setContentText(message) 
      .setAutoCancel(true).setTicker("Notification from kluebook") 
      .setVibrate(new long[] { 100, 250, 100, 250, 100, 250 }) 
      .setSound(alarmSound); 
    Intent resultIntent = null; 
    resultIntent = new Intent(context, MainLoginSignUpActivity.class); 
    PendingIntent resultPendingIntent = PendingIntent.getActivity(context, 
      notify_no, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    if (notify_no < 9) { 
     notify_no = notify_no + 1; 
    } else { 
     notify_no = 0; 
    } 
    nBuilder.setContentIntent(resultPendingIntent); 
    NotificationManager nNotifyMgr = (NotificationManager) context 
      .getSystemService(context.NOTIFICATION_SERVICE); 
    nNotifyMgr.notify(notify_no + 2, nBuilder.build()); 
} 

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

  • Нет связанных вопросов^_^