W pewnych sytuacjach (np. gdy trwa alarm lub przychodzi połączenie) aplikacja może potrzebować pilnej uwagi użytkownika. W przypadku aplikacji 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 znajdziesz informacje o tym, jak uzyskać takie działanie na urządzeniach z Androidem w wersji od 10 (poziom API 29) do 13 (poziom API 33).
Dodaj uprawnienie POST_NOTIFICATIONS
Od Androida 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 powiadomieniami w ustawieniach aplikacji. Więcej informacji o kanałach powiadomień znajdziesz w artykule Tworzenie kanałów powiadomień i zarządzanie nimi.
Kanały powiadomień twórz w metodach klasy Application
:
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 na ekranie Informacje o aplikacji coś podobnego do rysunku 1:
Zarządzanie uprawnieniami do powiadomień
Od Androida 13 i nowszych przed wyświetleniem powiadomień użytkownikom musisz poprosić 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 masz urządzenie z Androidem 13, kliknięcie przycisku Request
permission
spowoduje wyświetlenie okna pokazanego na rysunku 2:
Jeśli użytkownik zaakceptuje prośbę o przyznanie uprawnień, sekcja Informacje o aplikacji będzie wyglądać tak jak na rysunku 3.
Tworzenie powiadomienia o wysokim priorytecie
Podczas tworzenia powiadomienia dodaj 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(666, 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") }
W tym przykładzie powiadomienie wygląda jak na rysunku 4:
Powiadomienie o trwającym połączeniu
Gdy wyświetlisz powiadomienie użytkownikowi, może on je potwierdzić lub zamknąć. Użytkownik może na przykład odebrać lub odrzucić przychodzące połączenie telefoniczne.
Jeśli powiadomienie jest ciągłe, np. połączenie przychodzące, powiązaj je z usługą 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);