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>
Następnie 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 coś takiego jak ilustracja 1 na ekranie systemowym Informacje o aplikacji:
![Obraz pokazujący informacje o aplikacji, ekran powiadomień.](https://developer.android.com/static/images/ui/notifications/time-sensitive_notification_channel_empty.png?authuser=9&hl=pl)
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 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=9&hl=pl)
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ń](https://developer.android.com/static/images/ui/notifications/time-sensitive_notification_permission_granted.png?authuser=9&hl=pl)
Tworzenie powiadomienia o wysokim priorytecie
Tworząc powiadomienie, podaj 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=9&hl=pl)
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);