Wyświetlaj pilne powiadomienia

W pewnych sytuacjach aplikacja może wymagać pilnej interwencji użytkownika, np. gdy trwa alarm lub połączenie przychodzące. 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. Z tego dokumentu dowiesz się, jak uzyskać takie działanie na urządzeniach z Androidem 10 (poziom interfejsu API 29) i Androidem 13 (poziom API 33).

Dodaj uprawnienie POST_MESSAGES

W Androidzie 13 dodaj ten wiersz do pliku AndroidManifest.xml:

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

Potem możesz utworzyć kanał powiadomień.

Tworzenie kanału powiadomień

Utwórz kanał powiadomień, aby prawidłowo wyświetlać powiadomienia i zezwolić użytkownikowi na zarządzanie powiadomieniami w ustawieniach aplikacji. Więcej informacji o kanałach powiadomień znajdziesz w artykule na temat tworzenia kanałów powiadomień i zarządzania nimi.

Utwórz kanały powiadomień w metodzie onCreate zajęć 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 Twoją aplikację po raz pierwszy, na ekranie systemowym Informacje o aplikacji zobaczy coś takiego:

Obraz przedstawiający ekran Informacje o aplikacji i Powiadomienia.
Rysunek 1. Powiadomienia na ekranie Informacje o aplikacji w ustawieniach systemowych aplikacji.

Zarządzanie uprawnieniami do powiadomień

W Androidzie 13 przed wyświetleniem powiadomień użytkownikom należy prosić użytkowników o zgodę na wyświetlanie 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, naciśnięcie przycisku Request permission spowoduje 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 przedstawiają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

Utwórz powiadomienie, podając 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świetl powiadomienie użytkownikowi

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

Kotlin

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

Powiadomienie w tym przykładzie wygląda tak:

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

Powiadomienie bieżące

Gdy wyświetlisz powiadomienie użytkownikowi, może on zaakceptować lub odrzucić alert lub przypomnienie w aplikacji. Na przykład użytkownik może zaakceptować lub odrzucić połączenie przychodzące.

Jeśli powiadomienie ma charakter trwający, np. przychodzi połączenie telefoniczne, powiąż 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);