web-dev-qa-db-ja.com

whatsappのような通知をグループ化する方法Android?

2つ以上の通知を1つだけにグループ化し、「新しいメッセージが2つあります」のようなメッセージを表示する方法がわかりません。

29

以下のコードから注意する手順。

NotificationCompat.Builder:contains the UI specification and action information
NotificationCompat.Builder.build() :used to create notification (Which returns Notification object)
Notification.InboxStyle: used to group the notifications belongs to same ID
NotificationManager.notify():to issue the notification.

以下のコードを使用して通知を作成し、グループ化します。ボタンクリックに関数を含めます。

private final int NOTIFICATION_ID = 237;
private static int value = 0;
Notification.InboxStyle inboxStyle = new Notification.InboxStyle();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.Push_notify_icon);
public void buttonClicked(View v)
{
        value ++;
        if(v.getId() == R.id.btnCreateNotify){
            NotificationManager nManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            Notification.Builder builder = new Notification.Builder(this);            
            builder.setContentTitle("Lanes");
            builder.setContentText("Notification from Lanes"+value);
            builder.setSmallIcon(R.drawable.ic_launcher);
            builder.setLargeIcon(bitmap);
            builder.setAutoCancel(true);
            inboxStyle.setBigContentTitle("Enter Content Text");
            inboxStyle.addLine("hi events "+value);
            builder.setStyle(inboxStyle);
            nManager.notify("App Name",NOTIFICATION_ID,builder.build());
        }
}

個別の通知には、異なるNOTIFICATION_IDを割り当てます。

33
Sackurise

完全なロジックについては、回答を確認することを検討してください。各ユーザーメッセージを単一のメッセージにグループ化し、アクティブな通知を確認するために必要なように、共有設定とブロードキャストレシーバーを使用してロジックを使用しました。通知、それは私をまったく助けませんでした。だから私はいくつかのわずかなロジックを書くことにしました。

https://stackoverflow.com/a/38079241/6466619

1
VA Entertaiment

setGroupメソッドを使用し、groupId文字列をパラメーターとして渡すことで、すべての通知を1つのグループにスタックできます。

builer.setGroup( "グループID文字列");

NotificationManager nManager = (NotificationManager) 
getSystemService(NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(this);            
builder.setContentTitle("Lanes");
builder.setGroup("GROUP_ID_STRING");
builder.setContentText("Notification from Lanes"+value);
builder.setSmallIcon(R.drawable.ic_launcher);
builder.setLargeIcon(bitmap);
builder.setAutoCancel(true);
inboxStyle.setBigContentTitle("Enter Content Text");
inboxStyle.addLine("hi events "+value);
builder.setStyle(inboxStyle);
nManager.notify("App Name",NOTIFICATION_ID,builder.build());
1
Natesh bhat

NotificationManager.notify(ID, notification)を呼び出して通知IDで更新できるように、通知を作成する必要があります。

通知を更新するには、次の手順を作成する必要があります。

  1. NotificationCompat.Builderオブジェクトを更新または作成します
  2. それから通知オブジェクトを作成する
  3. 以前に使用したのと同じIDで通知を発行します

Android開発者ドキュメントからの例:

mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

// Sets an ID for the notification, so it can be updated
int notifyID = 1;

mNotifyBuilder = new NotificationCompat.Builder(this)
    .setContentTitle("New Message")
    .setContentText("You've received new messages.")
    .setSmallIcon(R.drawable.ic_notify_status)
numMessages = 0;

// Start of a loop that processes data and then notifies the user
...
mNotifyBuilder.setContentText(currentText).setNumber(++numMessages);

// Because the ID remains unchanged, the existing notification is updated.
mNotificationManager.notify(notifyID, mNotifyBuilder.build());
...

Android Stacking Notificationsのドキュメント https://developer.Android.com/training/wearables/notifications/stacks.html も参照してください。

0
Smittey