1

プッシュ通知を通知リスト/バーに投稿すると、.contentText と .number は最初は表示されません (.ticker、.icon、および .contentTitle は正常に表示されます)。ただし、別の通知を (別の ID で) 投稿した後、最初の通知がリストで押し下げられると、コンテンツのテキストと番号が表示されます。そして、新しいものにはテキストがありません。

ミリ秒タイマーでユニークIDを作っているので、どうにかして前回の記事を更新することはできないと思います。そのため、最新のものでなくなるまで、何らかの形でテキストが欠落するなど、最初は何か間違った状態で投稿している必要があります。

この問題は一部のデバイスでのみ発生します。主に 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'
4

3 に答える 3

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通知を見る

于 2013-08-23T06:15:46.647 に答える
1

syso を維持するか、デバッグで msg フィールドを確認してください。取得している空の文字列である可能性があります

(また)

このコードを試して、あなたのために確実に機能し、複数の通知を表示することもできます

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());
}
于 2013-08-23T06:43:47.423 に答える