PendingIntent.FLAG_UPDATE_CURRENT воссоздает активность - PullRequest
0 голосов
/ 02 мая 2019

У меня есть уведомление, и когда я нажимаю на него, я хочу запустить приложение, если оно еще не запущено, но если приложение уже запущено, я не хочу перезапускать его. Итак, я использую флаг PendingIntent.FLAG_UPDATE_CURRENT при создании PendingIntent.

Мой код:

private val notificationManager by lazy { NotificationManagerCompat.from(this) }

fun testPush() {
        val notificationBuilder = NotificationCompat.Builder(this, BuildConfig.APPLICATION_ID)
                .setSmallIcon(R.drawable.ill_launcher)

        notificationBuilder
                .setContentTitle("Title")
                .setContentText("Test text")
                .setContentIntent(buildPendingIntent())

        notificationBuilder
                .setAutoCancel(true)
                .priority = NotificationCompat.PRIORITY_DEFAULT

        notificationManager.notify(1, notificationBuilder.build())
}

 private fun buildPendingIntent(): PendingIntent {

        val intent = Intent(this, RootActivity::class.java)
        intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
        intent.putExtra("action", RootActivity.DEFAULT_INTENT)

        return PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
}

Но когда я запускаю приложение и нажимаю на уведомление, действие воссоздается.

1 Ответ

1 голос
/ 03 мая 2019

Вместо того, чтобы строить Intent для RootActivity, как вы делаете, вам нужно создать "запуск Intent" для вашего приложения. Самый простой способ сделать это - позвонить по номеру PackageManager.getLaunchIntentForPackage() и передать собственное имя пакета. Используйте возвращенный Intent при вызове PendingIntent.getActivity().

Это запустит ваше приложение, если оно не запущено, в противном случае, если оно уже запущено, оно просто выведет существующую задачу, содержащую ваше приложение, на передний план.

...