При отправке 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'
http://developer.android.com/guide/topics/ui/notifiers/notifications.html –
Принудительное преобразование long в int всегда будет иметь тот же int overflow. Поскольку 'System.currentTimeMillis()' длиной 14 длин. 'SystemClock.currentTimeMillis()', это время, когда поток работает в миллисекундах. Это намного меньше. –