Wyświetlaj pilne powiadomienia

W niektórych sytuacjach aplikacja może potrzebować pilnego zwrócenia uwagi użytkownika, np. gdy włącza się alarm lub przychodzi połączenie. Na urządzeniach z Androidem 9 (API na poziomie 28) lub starszym możesz to zrobić, uruchamiając aktywność, gdy aplikacja działa w tle. W tym dokumencie pokazujemy, jak uzyskać takie działanie na urządzeniach z Androidem 10 (poziom interfejsu API 29) i nowszym.

Dodawanie uprawnienia POST_NOTIFICATIONS

Od Androida 13 (poziom 33 interfejsu API) deklaruj uprawnienie POST_NOTIFICATIONS w pliku AndroidManifest.xml:

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

Po zadeklarowaniu uprawnień utwórz kanał powiadomień.

Tworzenie kanału powiadomień

Utwórz kanał powiadomień, aby wyświetlać powiadomienia i umożliwiać użytkownikom zarządzanie kategoriami powiadomień w ustawieniach systemowych. 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:

class MyApplication : 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, system wyświetli kanał na ekranie Informacje o aplikacji, jak pokazano na ilustracji 1:

Ekran powiadomień Informacje o aplikacji z wyświetlonym utworzonym kanałem.
Rysunek 1. sekcji Powiadomienia na ekranie Informacje o aplikacji w ustawieniach systemowych aplikacji.

Zarządzanie zgodami na wyświetlanie powiadomień

Od Androida 13 proś o uprawnienia do wysyłania powiadomień, zanim zaczniesz je wyświetlać użytkownikom.

Poniższy przykład kodu pokazuje, jak poprosić o uprawnienia do powiadomień w czasie działania aplikacji w Jetpack Compose:

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")
}

Na urządzeniach z Androidem 13 lub nowszym kliknięcie przycisku Poproś o uprawnienia powoduje wyświetlenie okna systemowego pokazanego na ilustracji 2:

Okno systemowe z prośbą o zezwolenie na powiadomienia.
Rysunek 2. Okno systemowe z prośbą o przyznanie uprawnień do powiadomień.

Gdy użytkownik przyzna uprawnienia, system zaktualizuje ekran Informacje o aplikacji, jak pokazano na ilustracji 3:

Ekran Informacje o aplikacji z przyznanymi uprawnieniami do wyświetlania powiadomień.
Rysunek 3. Przyznano zgodę na wyświetlanie powiadomień.

Tworzenie powiadomienia o wysokim priorytecie

Tworząc powiadomienie o wysokim priorytecie, podaj jasny tytuł i tekst wiadomości. Przypisz też kanał o wysokiej ważności i poziom priorytetu.

Poniższy przykład kodu konfiguruje i tworzy powiadomienie o wysokim priorytecie:

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(0, notificationBuilder.build())
}

Wyświetlanie powiadomienia użytkownikowi

Wywołanie funkcji showNotification powoduje wyświetlenie powiadomienia w ten sposób:

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

Na ilustracji 4 widać powiadomienie o wysokim priorytecie wyświetlane przez system:

Powiadomienie o wysokim priorytecie wyświetlane na urządzeniu.
Rysunek 4. Powiadomienie o wysokim priorytecie.

Powiadomienie o trwającej aktywności

Gdy wyświetlisz użytkownikowi powiadomienie, może on potwierdzić lub odrzucić alert lub przypomnienie z Twojej aplikacji. Użytkownik może na przykład odebrać lub odrzucić połączenie przychodzące.

Jeśli powiadomienie reprezentuje trwające zadanie w tle, np. aktywne połączenie telefoniczne, powiąż je z usługą na pierwszym planie. Poniższy fragment kodu pokazuje, jak wyświetlić powiadomienie powiązane z usługą na pierwszym planie:

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

Rozważ użycie aktualizacji na żywo

Powiadomienia bieżące, które są wrażliwe na czas, mogą zyskać na zwiększonej widoczności. Rozważ promowanie bieżących powiadomień jako aktualizacji na żywo, aby wyświetlać informacje o stanie w różnych miejscach interfejsu systemu.