W niektórych sytuacjach, np. w przypadku trwającego alarmu lub połączenia przychodzącego, aplikacja może potrzebować pilnie zwrócić na siebie uwagę użytkownika. W aplikacjach kierowanych na urządzenia z Androidem 9 (poziom API 28) lub starszym można to zrobić, uruchamiając aktywność, gdy aplikacja działa w tle. Z tego dokumentu dowiesz się, jak osiągnąć takie zachowanie na urządzeniach z Androidem 10 (poziom API 29) do Androida 13 (poziom API 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 Application klasy
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 Twoją aplikację po raz pierwszy, na ekranie systemowym Informacje o aplikacji zobaczy coś podobnego do tego, co widać na ilustracji 1:
Zarządzanie uprawnieniami do powiadomień
W Androidzie 13 poproś o uprawnienia do powiadomień, zanim zaczniesz je wyświetlać 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 Twoje urządzenie działa pod kontrolą Androida 13, kliknięcie przycisku Request
permission spowoduje wyświetlenie okna dialogowego pokazanego na ilustracji 2:
Jeśli użytkownik zaakceptuje prośbę o uprawnienia, sekcja Informacje o aplikacji będzie wyglądać jak na ilustracji 3:
Tworzenie powiadomienia o wysokim priorytecie
Podczas tworzenia powiadomienia dodaj opisowy tytuł i wiadomość.
Poniższy 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() spowoduje wyświetlenie powiadomienia w ten sposób:
Kotlin
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
Powiadomienie w tym przykładzie wygląda jak na ilustracji 4:
Powiadomienie o trwającej aktywności
Gdy wyświetlisz użytkownikowi powiadomienie, może on potwierdzić lub odrzucić alert albo przypomnienie z Twojej aplikacji. Użytkownik może na przykład odebrać lub odrzucić połączenie przychodzące.
Jeśli powiadomienie jest powiadomieniem o trwającej aktywności, np. o połączeniu przychodzącym, powiąż je z usługą działającą na pierwszym planie. Poniższy fragment kodu pokazuje, jak wyświetlić powiadomienie powiązane z usługą działającą 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 o trwającej aktywności wymagające szybkiego działania mogą być bardziej widoczne. Rozważ promowanie powiadomień o trwającej aktywności wymagających szybkiego działania jako aktualizacji na żywo, aby wyświetlać je w różnych interfejsach systemowych.