在某些情況下,應用程式可能需要緊急引起使用者注意,例如鬧鐘響起或接到來電。在搭載 Android 9 (API 級別 28) 以下版本的裝置上,您可能會在應用程式於背景執行時啟動活動,藉此處理這項問題。本文說明如何在搭載 Android 10 (API 級別 29) 以上版本的裝置上,達成這項行為。
新增 POST_NOTIFICATIONS 權限
從 Android 13 (API 級別 33) 開始,請在 AndroidManifest.xml 檔案中宣告 POST_NOTIFICATIONS 權限:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
宣告權限後,請建立通知管道。
建立通知管道
建立通知管道,顯示通知並讓使用者在系統設定中管理通知類別。如要進一步瞭解通知管道,請參閱「建立及管理通知管道」。
在 Application 類別的 onCreate 方法中建立通知管道:
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) } }
使用者首次執行應用程式時,系統會在「應用程式資訊」畫面中顯示管道,如圖 1 所示:
管理通知權限
從 Android 13 開始,您必須先要求通知權限,才能向使用者顯示通知。
以下程式碼範例說明如何在 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") }
在搭載 Android 13 以上版本的裝置上,輕觸「要求權限」按鈕會顯示圖 2 所示的系統對話方塊:
使用者授予權限後,系統會更新「應用程式資訊」畫面,如圖 3 所示:
建立高優先順序通知
建立高優先順序通知時,請提供清楚的標題和訊息文字。並指派高重要性管道和優先順序。
下列程式碼範例會設定及建構高優先權通知:
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()) }
向使用者顯示通知
呼叫 showNotification 函式會觸發通知,如下所示:
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
圖 4 顯示系統顯示的高優先順序通知:
持續性通知
向使用者顯示通知時,他們可以確認或關閉應用程式的警示或提醒。舉例來說,使用者可以接聽或拒接來電。
如果通知代表持續進行的背景工作 (例如通話中),請將通知與前景服務建立關聯。下列程式碼片段說明如何顯示與前景服務相關聯的通知:
// Provide a unique integer for the "notificationId" of each notification. startForeground(notificationId, notification)
考慮使用即時更新
具時效性的持續性通知可透過提高曝光度來發揮效益。 建議將持續性通知升級為「最新即時資訊」,在系統 UI 介面中顯示狀態資訊。