Wyświetlaj pilne powiadomienia

Aplikacja może wymagać pilnej interwencji użytkownika w określonych sytuacjach, takich jak trwający alarm lub połączenie przychodzące. W aplikacjach kierowanych na urządzenia, które działają na Androidzie 9 (poziom interfejsu API 28) lub starszym. Aby rozwiązać ten problem, uruchom aktywność podczas działania aplikacji w tle. W tym dokumencie opisujemy, jak osiągnąć na urządzeniach z Androidem 10 (poziom interfejsu API 29) Android 13 (poziom API 33).

Dodaj uprawnienie POST_PowiadomieniaS

Od Androida 13 dodaj ten wiersz do Plik AndroidManifest.xml:

<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 powiadomienia były wyświetlane prawidłowo, a funkcja zarządzać powiadomieniami w ustawieniach aplikacji. Więcej informacji na temat: kanały powiadomień można znaleźć w sekcji Tworzenie powiadomień i zarządzanie nimi kanałów.

Utwórz kanały powiadomień w zajęciach Application Metoda 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:

Obraz pokazujący informacje o aplikacji, ekran powiadomień.
Rysunek 1. W sekcji Powiadomienia w aplikacji Ekran z informacjami o ustawieniach systemowych aplikacji.

Zarządzanie uprawnieniami do powiadomień

Od Androida 13 prośba o zgodę na wyświetlanie powiadomień przed wyświetlać powiadomienia użytkownikom.

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 systemowe powiadomienia o uprawnienia.

Jeśli użytkownik zaakceptuje prośbę o przyznanie uprawnień, sekcja Informacje o aplikacji będzie wyglądać np. na ilustracji 3.

Obraz pokazują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

Tworząc powiadomienie, dodaj 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świetlanie powiadomienia użytkownikowi

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

Kotlin

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

Powiadomienie w tym przykładzie wygląda jak na ilustracji 4:

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

Powiadomienie w toku

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

Jeśli powiadomienie jest w toku, na przykład przychodzące połączenie telefoniczne, powiązanie powiadomienia z pierwszym planem; usługi. Następujący 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);