Wyświetlaj pilne powiadomienia

Aplikacja może wymagać pilnej interwencji w określonych sytuacjach, np. gdy trwa alarm lub połączenie przychodzące. W przypadku aplikacji kierowanych na urządzenia z Androidem 9 (poziom interfejsu API 28) lub starszym możesz rozwiązać ten problem, uruchamiając działanie, gdy aplikacja działa w tle. Z tego dokumentu dowiesz się, jak uzyskać takie działanie na urządzeniach z Androidem 10 (poziom interfejsu API 29) do Androida 13 (poziom interfejsu API 33).

Dodaj uprawnienie POST_PowiadomieniaS

Od Androida 13 do pliku AndroidManifest.xml dodaj ten wiersz:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

Następnie możesz utworzyć kanał powiadomień.

Tworzenie kanału powiadomień

Utwórz kanał powiadomień, aby powiadomienia były wyświetlane prawidłowo, i pozwól użytkownikowi na zarządzanie nimi w ustawieniach aplikacji. Więcej informacji o kanałach powiadomień znajdziesz w artykule Tworzenie kanałów powiadomień i zarządzanie nimi.

Utwórz kanały powiadomień w metodzie onCreate klasy Application:

Kotlin

class DACapp : Application() {
    override fun onCreate() {
        super.onCreate()
        val channel = NotificationChannel(
            CHANNEL_ID,
            "High priority notifications",
            NotificationManager.IMPORTANCE_HIGH
        )

        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.createNotificationChannel(channel)
    }
}

Gdy użytkownik uruchomi aplikację po raz pierwszy, na ekranie systemowym Informacje o aplikacji pojawi się coś takiego jak ilustracja 1:

Obraz pokazujący informacje o aplikacji, ekran powiadomień.
Rysunek 1. Sekcja Powiadomienia na ekranie Informacje o aplikacji w ustawieniach systemowych aplikacji.

Zarządzanie uprawnieniami do powiadomień

Od Androida 13 należy prosić o zgodę na wyświetlanie powiadomień, zanim zaczniesz pokazywać je użytkownikom.

Minimalna implementacja wygląda tak:

Kotlin

val permissionLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.RequestPermission(),
    onResult = { hasNotificationPermission = it }
)
...
Button(
    onClick = {
        if (!hasNotificationPermission) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
            }
        }
    },
) {
    Text(text = "Request permission")
}

Jeśli na urządzeniu działa Android 13, kliknięcie przycisku Request permission powoduje wyświetlenie okna pokazanego na ilustracji 2:

Obraz przedstawiający okno z prośbą o uprawnienia
Rysunek 2. Okno systemowe prośby o zgodę na wyświetlanie powiadomień.

Jeśli użytkownik zaakceptuje prośbę o uprawnienia, sekcja Informacje o aplikacji będzie wyglądać tak jak na ilustracji 3:

Obraz pokazujący ekran Informacje o aplikacji po otrzymaniu prośby o zgodę na wyświetlanie powiadomień
Rysunek 3. Przyznano zgodę na wyświetlanie powiadomień.

Tworzenie powiadomienia o wysokim priorytecie

Tworząc powiadomienie, dodaj opisowy tytuł i treść.

Ten przykład zawiera powiadomienie:

Kotlin

private fun showNotification() {
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

    val notificationBuilder =
        NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.baseline_auto_awesome_24)
            .setContentTitle("HIGH PRIORITY")
            .setContentText("Check this dog puppy video NOW!")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setCategory(NotificationCompat.CATEGORY_RECOMMENDATION)

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

Wyświetlanie powiadomienia użytkownikowi

Wywołanie funkcji showNotification() powoduje wyświetlenie powiadomienia w następujący sposób:

Kotlin

Button(onClick = { showNotification() }) {
    Text(text = "Show notification")
}

Powiadomienie w tym przykładzie wygląda jak na ilustracji 4:

Obraz przedstawiający powiadomienie o wysokim priorytecie
Rysunek 4. Powiadomienie o wysokim priorytecie.

Powiadomienie w toku

Gdy wyświetlasz powiadomienie, użytkownik może zaakceptować lub odrzucić alert lub przypomnienie dotyczące aplikacji. Użytkownik może na przykład przyjąć lub odrzucić przychodzące połączenie telefoniczne.

Jeśli powiadomienie jest trwające, na przykład przychodzące połączenie telefoniczne, powiąż je z usługą działającą na pierwszym planie. Ten fragment kodu pokazuje, jak wyświetlić powiadomienie powiązane z usługą na pierwszym planie:

Kotlin

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification)

Java

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification);