Wyświetlaj pilne powiadomienia

W pewnych sytuacjach (np. gdy trwa alarm lub przychodzi połączenie) aplikacja może potrzebować pilnej uwagi użytkownika. W przypadku aplikacji kierowanych na urządzenia z Androidem 9 (poziom interfejsu API 28) lub starszym możesz to zrobić, uruchamiając aktywność, 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>

Gdy to zrobisz, 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 powiadomieniami 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 systemu aplikacji.

Zarządzanie uprawnieniami do powiadomień

Od Androida 13 i nowszych przed wyświetleniem 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:

Ilustracja przedstawiająca okno z prośbą o przyznanie uprawnień
Rysunek 2. Okno dialogowe systemu dotyczące prośby o uprawnienia dotyczące powiadomień.

Jeśli użytkownik zaakceptuje prośbę o przyznanie uprawnień, sekcja Informacje o aplikacji będzie wyglądać tak jak na rysunku 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 przedstawiający powiadomienie o wysokim priorytecie
Rysunek 4. powiadomienie o wysokim priorytecie,

Powiadomienie o trwającym połączeniu

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);