2016-11-23 12 views
1

私はサーバーからメッセージを受け取るアプリケーションに取り組んでいます。メッセージを受信すると、通知が表示されます。 2番目のメッセージが受信されると、新しい通知をまったく作成せずにスタックする必要があります。Androidの通知は積み重ねません

メッセージを受信したときに実行されるメソッドを持つインターフェイスを作成しました。

オブジェクトはメッセージが受信され、コンストラクタは上記のインタフェースを受け入れます。

サーバーオブジェクトを初期化するときに、リスナーインターフェイスの新しいインスタンスを渡します。このインスタンスでは、オーバーライドされたメソッドによって通知が作成されます。思考プロセスは、新しい通知が作成されるたびに、私はNEW_POST_NOTIを1だけ増やしてグループに追加するということです。同じコードは、メッセージが受信されるたびに実行されていることを

final int PUSHES_GROUP = 67; 
int NEW_POST_NOTI = 56; 

...

Server server = new Server((msg) -> { 
    nm = NotificationManagerCompat.from(ctx); 
    Notification noti = new NotificationCompat.Builder(ctx) 
     .setSmallIcon(R.drawable.ic_noti) 
     .setContentTitle("New Message") 
     .setContentText(msg) 
     .setGroup(PUSHES_GROUP) 
     .build(); 
    nm.notify(NEW_PUSH_NOTI++, noti); 
}); 

、それらをグループ化するのではなく、メッセージごとに別々の通知を作成します。

私のコードは次のようになります。私もsetStyleを使ってそれをInboxStyleにしようとしましたが、通知を動的に追加する方法がわかりません。論理に問題がありますか、単にNotification APIを間違って使用していますか?

+0

グルーピングはアンドロイドウェア用です。アンドロイドハンドヘルドの場合は、受信トレイスタイルをラインとサマリーで使用してください:https://developer.android。com/training/wearables/notifications/stacks.html#AddSummary – njzk2

+0

あなたは正しいです。それにもかかわらず、私は想像するほど簡単ではありませんが、かなりシンプルです。 – Plays2

答えて

2

答えを書くには、新しいメッセージが受信されるたびにInboxStyleインスタンス変数を作成し、その上にaddLineを呼び出すことでした。その後、アプリがonResumeを呼び出したら、InboxStyleをリセットします。例えばので

public class ServerService extends Service { 
    ... 
    NotificationCompat.InboxStyle style = new NotificationCompat.InboxStyle(); 
    private static NotificationManagerCompat nm; 
    private final Context ctx = Server.this; 
    Server server; 
    private static int pendingPushes = 0; 
    private final int NEW_PUSH_NOT = 2; 
    ... 
    @Override 
    public int onStartCommand(Intent i, int f, final int s) { 
     nm = NotificationManagerCompat.from(ctx); 
     try { 
      server = new Server((msg) -> { 
       pendingPushes++; 
       style.setBigContentTitle(pendingPushes +" new pushes");      
       style.addLine(msg); 
       Notification noti = new NotificationCompat.Builder(ctx) 
         .setSmallIcon(R.drawable.ic_noti) 
         .setStyle(style) 
         .setGroupSummary("Click here to view") 
         .setNumber(pendingPushes) //Should make the number in bottom right the amount of pending messages but not tested yet 
         .build(); 
       nm.notify(NEW_PUSH_NOT, noti); 
      }); 
      server.start(); 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } 
     return START_STICKY; 
    } 

は、それから私は、保留中のカウントを再起動し、通知を閉鎖する方法を作成しました。私は私のMainActivityあなたが束を助け、答えみんなにonResume()

public static void resetPendingPushes() { 
    pendingPushes = 0; 
    style = new NotificationCompat.InboxStyle(); 
    if (nm != null) { 
     nm.cancel(NEW_PUSH_NOT); 
    } 
} 

MainActivity

@Override 
protected void onResume() { 
    super.onResume(); 
    ServerService.resetPendingPushes(); 
} 

感謝の内部にあることを実行します!! 似たような質問がある人は、申し訳ありませんが、私の答えにタイプミスがあると、セルからかなり早く入力しました。

1

を使用することをお勧めします。これはNotificationManagerで使用されています。このNotificationIDは、基本的にアプリケーションごとに一意のIDを表します。したがって、同じ通知IDを使用すると、すべての通知をまとめることができます。以下を試してみてください。

static final int MY_NOTIFICATION_ID = 1; 

このような静的な通知IDを宣言します。そして、同じことを通知してください! ので、代わりの

nm.notify(NEW_PUSH_NOTI++, noti); 

あなたは

nm.notify(MY_NOTIFICATION_ID, noti); 
+0

それはあなたのために働いたのですか? – San

+0

これだけではありませんでした。私の答えをチェックしてください。 – Plays2

関連する問題