Wyświetlaj pilne powiadomienia

W niektórych sytuacjach aplikacja może potrzebować pilnego zwrócenia uwagi użytkownika, np. gdy włącza się alarm lub przychodzi połączenie. W aplikacjach 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 pokazujemy, jak uzyskać takie działanie na urządzeniach z Androidem 10 (API na poziomie 29) do Androida 13 (API na poziomie 33).

Dodawanie uprawnienia POST_NOTIFICATIONS

W Androidzie 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 nimi w ustawieniach aplikacji. 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:

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, na ekranie systemowym Informacje o aplikacji zobaczy coś podobnego do tego, co widać na ilustracji 1:

Ilustracja przedstawiająca ekran Informacje o aplikacji – Powiadomienia w aplikacji.
Rysunek 1. sekcji Powiadomienia na ekranie Informacje o aplikacji w ustawieniach systemowych aplikacji.

Zarządzanie uprawnieniami do powiadomień

Od Androida 13 przed wyświetleniem użytkownikom powiadomień musisz poprosić ich 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 na urządzeniu jest zainstalowany Android 13, kliknięcie przycisku Request permission spowoduje wyświetlenie okna dialogowego pokazanego na ilustracji 2:

Ilustracja przedstawiająca okno z prośbą o uprawnienia
Rysunek 2. Okno systemowe z prośbą o przyznanie uprawnień do wyświetlania powiadomień.

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

Obraz pokazujący ekran Informacje o aplikacji po przyznaniu uprawnień do powiadomień
Rysunek 3. Przyznano zgodę na wyświetlanie powiadomień.

Tworzenie powiadomienia o wysokim priorytecie

Podczas tworzenia powiadomienia podaj 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(0, 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")
}

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

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

Powiadomienie o trwającej aktywności

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

Jeśli powiadomienie jest ciągłe, np. połączenie przychodzące, 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:

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

Rozważ użycie aktualizacji na żywo

Powiadomienia bieżące, które są wrażliwe na czas, mogą zyskać na większej widoczności. Rozważ promowanie bieżących powiadomień wymagających szybkiego działania jako aktualizacji na żywo, aby wyświetlać je w różnych interfejsach systemu.