W niektórych sytuacjach aplikacja może potrzebować pilnego zwrócenia uwagi użytkownika, np. gdy włącza się alarm lub przychodzi połączenie. Na urządzeniach z Androidem 9 (API na poziomie 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 (poziom interfejsu API 29) i nowszym.
Dodawanie uprawnienia POST_NOTIFICATIONS
Od Androida 13 (poziom 33 interfejsu API) deklaruj uprawnienie
POST_NOTIFICATIONS w pliku AndroidManifest.xml:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Po zadeklarowaniu uprawnień utwórz kanał powiadomień.
Tworzenie kanału powiadomień
Utwórz kanał powiadomień, aby wyświetlać powiadomienia i umożliwiać użytkownikom zarządzanie kategoriami powiadomień w ustawieniach systemowych. 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:
class MyApplication : 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, system wyświetli kanał na ekranie Informacje o aplikacji, jak pokazano na ilustracji 1:
Zarządzanie zgodami na wyświetlanie powiadomień
Od Androida 13 proś o uprawnienia do wysyłania powiadomień, zanim zaczniesz je wyświetlać użytkownikom.
Poniższy przykład kodu pokazuje, jak poprosić o uprawnienia do powiadomień w czasie działania aplikacji w Jetpack Compose:
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") }
Na urządzeniach z Androidem 13 lub nowszym kliknięcie przycisku Poproś o uprawnienia powoduje wyświetlenie okna systemowego pokazanego na ilustracji 2:
Gdy użytkownik przyzna uprawnienia, system zaktualizuje ekran Informacje o aplikacji, jak pokazano na ilustracji 3:
Tworzenie powiadomienia o wysokim priorytecie
Tworząc powiadomienie o wysokim priorytecie, podaj jasny tytuł i tekst wiadomości. Przypisz też kanał o wysokiej ważności i poziom priorytetu.
Poniższy przykład kodu konfiguruje i tworzy powiadomienie o wysokim priorytecie:
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:
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
Na ilustracji 4 widać powiadomienie o wysokim priorytecie wyświetlane przez system:
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 odebrać lub odrzucić połączenie przychodzące.
Jeśli powiadomienie reprezentuje trwające zadanie w tle, np. aktywne połączenie telefoniczne, 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:
// 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 zwiększonej widoczności. Rozważ promowanie bieżących powiadomień jako aktualizacji na żywo, aby wyświetlać informacje o stanie w różnych miejscach interfejsu systemu.