지속적인 알람이나 수신 전화와 같은 특정 상황에서 앱이 급하게 사용자의 주의를 환기해야 할 수 있습니다. 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 표시 경로에 상태 정보를 표시하는 것이 좋습니다.