Wyświetlaj pilne powiadomienia

W pewnych sytuacjach, np. gdy trwa alarm lub przychodzi połączenie, aplikacja może potrzebować pilnej uwagi użytkownika. W aplikacjach 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. W tym dokumencie znajdziesz informacje o tym, jak uzyskać takie działanie na urządzeniach z Androidem w wersji od 10 (poziom API 29) do 13 (poziom API 33).

Dodaj uprawnienie POST_NOTIFICATIONS

Od Androida 13 dodaj do pliku AndroidManifest.xml 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 prawidłowo wyświetlać powiadomienia i umożliwić użytkownikowi zarządzanie nimi w ustawieniach aplikacji. Więcej informacji o kanałach powiadomień znajdziesz w artykule Tworzenie kanałów powiadomień i zarządzanie nimi.

Kanały powiadomień twórz w metodach klasy Application: onCreate

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, zobaczy na ekranie Informacje o aplikacji coś podobnego do rysunku 1:

Ilustracja pokazująca ekran powiadomień w sekcji Informacje o aplikacji.
Rysunek 1. Sekcja Powiadomienia na ekranie Informacje o aplikacji w ustawieniach systemowych aplikacji.

Zarządzanie uprawnieniami do powiadomień

Od Androida 13 przed wyświetlaniem powiadomień użytkownikom musisz poprosić o zezwolenie na wysyłanie powiadomień.

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 masz urządzenie z Androidem 13, kliknięcie przycisku Request permission spowoduje wyświetlenie okna pokazanego na rysunku 2:

Obraz przedstawiający okno z prośbą o uprawnienia
Rysunek 2. Okno dialogowe systemu dotyczące prośby o uprawnienia dotyczące powiadomień.

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

Ilustracja przedstawiająca ekran Informacje o aplikacji po udzieleniu uprawnień do wysyłania powiadomień
Rysunek 3. Przyznano zgodę na wyświetlanie powiadomień.

Tworzenie powiadomienia o wysokim priorytecie

Podczas tworzenia powiadomienia dodaj opisowy tytuł i wiadomość.

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 ten sposób:

Kotlin

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

W tym przykładzie powiadomienie wygląda jak na rysunku 4:

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

Powiadomienie w toku

Gdy wyświetlisz powiadomienie użytkownikowi, może on je potwierdzić lub zamknąć. Użytkownik może na przykład odebrać lub odrzucić przychodzące połączenie telefoniczne.

Jeśli powiadomienie jest ciągłe, np. połączenie przychodzące, powiązaj je z usługą 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);