Запретить создание новых действий с помощью уведомления - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть приложение, которое использует IntentService для работы в фоновом режиме, даже если оно закрыто.

Есть кнопка, которая запускает фоновый процесс и появляется уведомление. Это уведомление не исчезнет, ​​пока пользователь не нажмет другую кнопку, которая останавливает IntentService.

Но здесь у меня возникла другая проблема. Я запускаю приложение в первый раз. Затем нажмите кнопку, которая инициализирует IntentService, появится уведомление. Сразу после этого, когда приложение все еще находится на экране, я нажимаю уведомление, и похоже, что приложение создает его дубликат. Я могу нажать на уведомление несколько раз, и создается много копий приложения.

Только что нашел несколько советов, таких как добавление флагов в PendingIntent и вставка некоторых строк в манифест, но пока ничего не помогло.

Может быть, мне нужно что-то изменить в уведомлении или намерении в ожидании?

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    createNotificationChannel()

    val notificationIntent = Intent(this, MainActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(
        this,
        0, notificationIntent,  PendingIntent.FLAG_CANCEL_CURRENT
    )
    val notification = NotificationCompat.Builder(this, CHANNEL_ID)
        .setContentTitle("Foreground Service Kotlin Example")
        .setContentText("kylsha")
        .setSmallIcon(R.drawable.ic_notification)
        .setContentIntent(pendingIntent)
        .build()

    startForeground(1, notification)

    return super.onStartCommand(intent, flags, startId)
}

Вот как это выглядит

enter image description here

Я хочу, чтобы уведомление запускало действие только тогда, когда приложение закрыто или свернуто, а не создавало несколько копий этого что-то нужно сделать, чтобы pendingIntent?

1 Ответ

0 голосов
/ 21 февраля 2020

Попробуйте этот код, возможно, он вам поможет

notification = new NotificationCompat.Builder(context);
        notification.setAutoCancel(true);
        notification.setSmallIcon(R.mipmap.ic_launcher);
        notification.setWhen(System.currentTimeMillis());
        notification.setTicker("Transferring data...");
        notification.setContentTitle(context.getResources().getString(R.string.app_name));
        notification.setContentTitle("Transferring data...");
        notification.setOngoing(true);
        notification.setDefaults(Notification.FLAG_ONGOING_EVENT);
        notification.setContentIntent(pendingIntent);
        NotificationManager nm = (NotificationManager)context.getApplicationContext().getSystemService(context.getApplicationContext().NOTIFICATION_SERVICE);
        nm.notify(1,notification.build());

вы можете "закрыть" уведомление вручную с помощью

nm.cancel(1);
...