轻按一个通知即可删除所有通知

时间:2019-02-13 12:36:14

标签: android firebase-cloud-messaging android-notifications android-notification-bar

我已使用Firebase消息传递服务,并且已生成通知。当我收到多个通知时,当我点击一个通知时,所有其他通知都将被删除。我不想删除其他未使用的通知。在这里,我如何生成通知,

public class MyNotificationManager {

private Context mCtx;
private static  int notification_count=0;
private static MyNotificationManager mInstance;
public  static final String NOTIFICATION_CHANNEL_ID = "10001";
private NotificationManager mNotificationManager;
private NotificationCompat.Builder mBuilder;
private MyNotificationManager(Context context) {
    mCtx = context;
}
public static synchronized MyNotificationManager getInstance(Context context) {
    if (mInstance == null) {
        mInstance = new MyNotificationManager(context);
    }
    return mInstance;
}
public void createNotification(String title, String message, int contentId)
{
    /**Creates an explicit intent for an Activity in your app**/
    Intent resultIntent = new Intent(mCtx,HomeActivity.class);
    resultIntent.putExtra("contentId", "" + contentId);
    resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    TaskStackBuilder mStackBuilder = TaskStackBuilder.create(mCtx);
    mStackBuilder.addNextIntent(resultIntent);

    PendingIntent resultPendingIntent =
            mStackBuilder.getPendingIntent(contentId, PendingIntent.FLAG_ONE_SHOT);

    mBuilder = new NotificationCompat.Builder(mCtx);
    mBuilder.setSmallIcon(R.mipmap.ic_launcher);
    mBuilder.setContentTitle(title)
            .setContentText(message)
            .setAutoCancel(true)
            .setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
            .setContentIntent(resultPendingIntent);

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

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
    {
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,
                "DEFAULT_CHANNEL", importance);
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        notificationChannel.enableVibration(true);
        notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
        assert mNotificationManager != null;
        mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
        mNotificationManager.createNotificationChannel(notificationChannel);
    }

    assert mNotificationManager != null;
    mNotificationManager.notify(notification_count++ /* Request Code */, mBuilder.build());
}

}

1 个答案:

答案 0 :(得分:0)

尝试此操作将为您提供帮助:-

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = MyFirebaseMessagingService.class.getSimpleName();
    NotificationCompat.Builder builder;
    String CHANNEL_ID = "my_channel_01";
    PendingIntent pendingIntent;
    private NotificationUtils notificationUtils;
    private NotificationManager mNotificationManager;


    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.e(TAG, "From: " + remoteMessage.getFrom());
        Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());

        if (remoteMessage.getNotification() == null)
            return;
        // Check if message contains a notification payload.
        if(remoteMessage.getNotification() != null) {
            handleNotification(remoteMessage, remoteMessage.getNotification().getBody(), remoteMessage.getNotification().getTitle());
        }

    }

    private void handleNotification(RemoteMessage remoteMessage, String body, String title) {
        if (mNotificationManager == null) {
            mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
        }

        boolean isNotificationSound = true;
        //TODO: update count if app is open.
        if (!NotificationUtils.isAppIsInBackground(this)) {
            if (isNotificationSound) {
                try {
                    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                    Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
                    r.play();
                } catch (Exception e) {
                }
            }
            covertRemoteToJson(remoteMessage, body, title);
        }else {
            covertRemoteToJson(remoteMessage, body, title);
        }
    }

    private void covertRemoteToJson(RemoteMessage remoteMessage, String body, String title) {
        if (remoteMessage.getData().size() > 0) {
            Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());

            try {
                //Map<String, String> params = remoteMessage.getData();
                if (!StringUtils.isNullOrEmpty(remoteMessage.getData().toString())) {
                    JSONObject json = new JSONObject(remoteMessage.getData().toString());
                    handleDataMessage(json, body, title);
                }
            } catch (Exception e) {
                e.printStackTrace();
                e.getMessage();
                Log.e(TAG, "Exception: " + e.getMessage());
            }
        }
    }

    private void handleDataMessage(JSONObject json, String body, String title) {
        int requestID = (int) System.currentTimeMillis();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            int importance = NotificationManager.IMPORTANCE_HIGH;
            assert mNotificationManager != null;
            NotificationChannel mChannel = mNotificationManager.getNotificationChannel(CHANNEL_ID);
            if (mChannel == null) {
                mChannel = new NotificationChannel(CHANNEL_ID, title, importance);
                mChannel.enableVibration(true);
                mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
                mNotificationManager.createNotificationChannel(mChannel);
            }
            builder = new NotificationCompat.Builder(this);
            Intent intent = new Intent(this, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            intent.putExtra(AppConstants.EXTRAS.IS_FROM_NOTIFICATION, true);
            intent.putExtra(AppConstants.EXTRAS.NOTIFICATION_LANDING_DATA, json.toString());
            pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
            builder.setContentTitle(title)                            // required
                    .setSmallIcon(getNotificationIcon())   // required
                    .setContentText(body).setWhen(System.currentTimeMillis()) // required
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setAutoCancel(true)
                    .setContentIntent(pendingIntent)
                    .setChannelId(CHANNEL_ID)
                    .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
        } else {
            builder = new NotificationCompat.Builder(this);
            Intent intent = new Intent(this, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            intent.putExtra(AppConstants.EXTRAS.IS_FROM_NOTIFICATION, true);
            intent.putExtra(AppConstants.EXTRAS.NOTIFICATION_LANDING_DATA, json.toString());
            pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
            builder.setContentTitle(title)                            // required
                    .setSmallIcon(getNotificationIcon())   // required
                    .setContentText(body).setWhen(System.currentTimeMillis()) // required
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setAutoCancel(true)
                    .setChannelId(CHANNEL_ID)
                    .setContentIntent(pendingIntent)
                    .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400})
                    .setPriority(Notification.PRIORITY_HIGH);
        }
        Notification notification = builder.build();
        mNotificationManager.notify(requestID, notification);
    }

    private static int getNotificationIcon() {
        return R.mipmap.ic_launcher;
    }

}