简体   繁体   中英

Group different notifications in same stack

I have a simple app that generates notifications on button Click. I also have an editText so that the content Text is typed by the user. I have two buttons that generates two different notifications. My requirement is that on every button click there should be only one notification generated and the rest should be in the notification stack. I have tried using notification setGroup property but the method doesn't seem to work. I have attached my code below for further reference.

Main Activity(Java file):-

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.TaskStackBuilder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.app.NotificationCompat;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    private static final String GROUP_NOTIFICATIONS="group_notifications";
    NotificationCompat.Builder notification;
    NotificationCompat.Builder notification1;
    PendingIntent pIntent;
    NotificationManager manager,manager1;
    Intent resultIntent;
    Button button,button1;
    EditText editText;
int a=0,b=100;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText= (EditText) findViewById(R.id.edittext);
        button= (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startNotification();
            }
        });
        button1= (Button) findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Notifications();
            }
        });
    }

    public void buttonClick(View view)
    {
        startNotification();
    }

public void startNotification()
{
//       Intent intent=new Intent(MainActivity.this,MyService.class);
//       intent.putExtra("id",Integer.toString(a));
//    startService(intent);
//    PendingIntent pendingIntent=PendingIntent.getService(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);


    String str=editText.getText().toString();


    notification=new NotificationCompat.Builder(this);
    notification.setContentTitle("ABC");
    notification.setContentText(str);
    notification.setTicker("New Message Arrived");
    notification.setSmallIcon(R.mipmap.ic_launcher);
    notification.setGroup(GROUP_NOTIFICATIONS);
    notification.setGroupSummary(true);
    int num=0;

//    notification.setNumber(++num);


    Uri uri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    notification.setSound(uri);
    manager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(a,notification.build());
    a++;
}

   public void Notifications()
   {
       String str=editText.getText().toString();


       notification1=new NotificationCompat.Builder(MainActivity.this);
       notification1.setContentTitle("ABC");
       notification1.setContentText(str);
       notification1.setTicker("New Message Arrived");
       notification1.setSmallIcon(R.mipmap.ic_launcher);
       notification1.setGroup(GROUP_NOTIFICATIONS);
       notification1.setGroupSummary(true);
       int num=0;

//       notification1.setNumber(++num);


       Uri uri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
       notification1.setSound(uri);
       manager1= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
       manager1.notify(a,notification1.build());
       a++;
   }
}

activity_main.xml(XML file)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.pratik.stacked.MainActivity">


<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/edittext"
    android:textColor="@color/colorPrimary"
    android:textSize="20sp"/>


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Stacked Notification"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Stacked notifiction 1"
        android:id="@+id/button2"
        android:layout_above="@+id/button"
        android:layout_alignLeft="@+id/button"
        android:layout_alignStart="@+id/button"
        />
</RelativeLayout>

AndroidManifest.xml(Manifest file)

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

The problem is that you are incrementing ( a++ ) the notification ID:

manager1.notify(a,notification1.build());
a++;

If you want to update an existing notification you should call notify with the notification ID that you want to update. You can refer to the documentation

If you are on Android >= 4.1 you can use expanded layouts . Take into account that in this case you may want to ensure compatibility following these guidelines .

This is all about setting properly flags. FLAG_GROUP_SUMMARY

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM