Wyświetlaj pilne powiadomienia

W niektórych sytuacjach, np. gdy włączy się alarm lub nadejdzie połączenie przychodzące, aplikacja może wymagać natychmiastowej uwagi użytkownika. 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. Z tego dokumentu dowiesz się, jak uzyskać takie działanie na urządzeniach z Androidem 10 (poziom API 29) i nowszym.

Dodawanie uprawnienia POST_NOTIFICATIONS

Począwszy od Androida 13 (poziom API 33), zadeklaruj 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żliwić 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 rysunku 1:

Ekran powiadomień z informacjami o aplikacji, na którym widać utworzony kanał.
Rysunek 1. Sekcja Powiadomienia na ekranie Informacje o aplikacji w ustawieniach systemowych aplikacji.

Zarządzanie zgodami na wyświetlanie powiadomień

W Androidzie 13 i nowszych przed wyświetleniem powiadomień użytkownikom musisz poprosić o zgodę na wyświetlanie powiadomień.

Poniższy przykładowy kod pokazuje, jak poprosić o zgodę na wyświetlanie powiadomień w czasie działania 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 rysunku 2:

Okno systemowe z prośbą o zezwolenie na powiadomienia.
Rysunek 2. Okno systemowe z prośbą o uprawnienia do wyświetlania powiadomień.

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

Ekran Informacje o aplikacji z przyznaną zgodą na wyświetlanie powiadomień.
Rysunek 3. Przyznano zgodę na wyświetlanie powiadomień.

Tworzenie powiadomienia o wysokim priorytecie

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

Poniższy przykładowy kod 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")
}

Rysunek 4 przedstawia 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 powiadomienie użytkownikowi, może on potwierdzić lub odrzucić alert lub przypomnienie z aplikacji. Użytkownik może na przykład odebrać lub odrzucić połączenie przychodzące.

Jeśli powiadomienie dotyczy trwającego zadania w tle, takiego jak 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

Trwające powiadomienia, które są pilne, mogą zyskać na zwiększonej widoczności. Rozważ promowanie bieżących powiadomień jako aktualizacji na żywo, aby wyświetlać informacje o stanie na różnych powierzchniach interfejsu systemu.