Фоновое уведомление отображается только один раз - PullRequest
0 голосов
/ 08 января 2019

Я использую Android NotificationCompat.Builder и каждый раз, когда пользователь открывает приложение или закрывает его, он отправляет фоновое уведомление.

Я хочу знать, что я должен написать, чтобы это уведомление вообще появлялось только один раз. Это означает, что если пользователь однажды получил это уведомление или удалил его со своего экрана, он больше не будет отображать это уведомление?

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                context, channelID)
                .setSmallIcon(icon)
                .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon))
                .setColor(ContextCompat.getColor(context, R.color.white))
                .setContentTitle("")                                                          .setContentText(getResources().getString(R.string.message))
                .setLights(Color.RED, 3000, 3000)
                .setVibrate(new long[]{0, 1000})
                .setSound(null)
                .setAutoCancel(true);

        mBuilder.setPriority(Notification.PRIORITY_MIN);
        Notification notification = mBuilder.build();


        if (Build.VERSION.SDK_INT >= 26) {
            startForeground(id, notification);
            stopForeground( false );
            notificationManager.cancel(id);
        }

1 Ответ

0 голосов
/ 08 января 2019

Используйте флаг, используя SharedPreferences, чтобы проверить, отправили ли вы уже уведомление. Если вы отправили, вы можете обновить флаг до 1. В следующий раз, если вы получите значение флага как 1, пропустите отправку уведомления.

SharedPreferences preferences = getApplicationContext().getSharedPreferences("app", 0);
int notificationFlag = preferences.getInt("notification", 0);

if (notificationFlag == 0) {
     // The notification is not yet sent.
     // Send the notification first and mark the flag as 1
     SharedPreferences.Editor editor = preferences.edit();
     editor.putInt("notification", 1)
} else {
     // The Notification is already sent once.
}
...