Aplikacja może wymagać pilnej interwencji w określonych sytuacjach, np. gdy trwa alarm lub połączenie przychodzące. W przypadku aplikacji 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) do Androida 13 (poziom interfejsu API 33).
Dodaj uprawnienie POST_PowiadomieniaS
Od Androida 13 do pliku AndroidManifest.xml
dodaj ten wiersz:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Następnie możesz utworzyć kanał powiadomień.
Tworzenie kanału powiadomień
Utwórz kanał powiadomień, aby powiadomienia były wyświetlane prawidłowo, i pozwól użytkownikowi na 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 pojawi się coś takiego jak ilustracja 1:
![Obraz pokazujący informacje o aplikacji, ekran powiadomień.](https://developer.android.com/static/images/ui/notifications/time-sensitive_notification_channel_empty.png?authuser=7&hl=pl)
Zarządzanie uprawnieniami do powiadomień
Od Androida 13 należy prosić o zgodę na wyświetlanie powiadomień, zanim zaczniesz pokazywać je 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 na urządzeniu działa Android 13, kliknięcie przycisku Request
permission
powoduje wyświetlenie okna pokazanego na ilustracji 2:
![Obraz przedstawiający okno z prośbą o uprawnienia](https://developer.android.com/static/images/ui/notifications/time-sensitive_notification_permission_request_dialog.png?authuser=7&hl=pl)
Jeśli użytkownik zaakceptuje prośbę o uprawnienia, sekcja Informacje o aplikacji będzie wyglądać tak jak na ilustracji 3:
![Obraz pokazujący ekran Informacje o aplikacji po otrzymaniu prośby o zgodę na wyświetlanie powiadomień](https://developer.android.com/static/images/ui/notifications/time-sensitive_notification_permission_granted.png?authuser=7&hl=pl)
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](https://developer.android.com/static/images/ui/notifications/time-sensitive_notification.png?authuser=7&hl=pl)
Powiadomienie w toku
Gdy wyświetlasz powiadomienie, użytkownik może zaakceptować lub odrzucić alert lub przypomnienie dotyczące aplikacji. Użytkownik może na przykład przyjąć lub odrzucić przychodzące połączenie telefoniczne.
Jeśli powiadomienie jest trwające, na przykład przychodzące połączenie telefoniczne, powiąż je z usługą działającą 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);