[Android] 알림(Notification) 클릭이 먹히지않을 때 해결방법: PendingIntent , setFullScreenIntent
백그라운서비스 코드에서 알림을 보내고 있었다. 그러나 알림(Notification)을 클릭했을 때 앱의 메인화면이나 지정한 화면으로 이동처리하기위해 PendingIntent를 Notification 생성시 FullScreenIntent로 추가하였다. 그러나 알림(Notification)을 클릭해도 아무런 변화가 없었다. 전혀 먹히지 않는 상황이 발생하였다. 원인이 무엇인지 한참을 해맸다.
if (Build.VERSION.SDK_INT > 28) { // 안드로이드 9( 28 파이 버전) int NOTIFICATION_ID = (int) (System.currentTimeMillis() % 10000); Intent sIntent = new Intent(context, MainActivity.class); sIntent.putExtra("ACTION", "main"); sIntent.putExtra("NOTIFICATION_ID", NOTIFICATION_ID); sIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP ); //같은창 여러번 띄우지 않고 기존창 띄운다. sIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //Activity가 아닌 곳에서 startActivity를 사용하려고 할때 필수 PendingIntent sPpendingIntent = PendingIntent.getActivity(context, NOTIFICATION_ID, sIntent, PendingIntent.FLAG_UPDATE_CURRENT); // | PendingIntent.FLAG_ONE_SHOT String CHANNEL_ID = "channel-sample"; NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, context.getResources().getString(R.string.cont_text_1), NotificationManager.IMPORTANCE_HIGH); Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID) //.setContentTitle("") //자동표기됨 .setContentText(context.getResources().getString(R.string.info_contents_txt_5)) .setAutoCancel(true) .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_REMINDER) .setSmallIcon(R.drawable.push_icon) .setFullScreenIntent(sPpendingIntent, true) .build(); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannel(notificationChannel); notificationManager.notify(NOTIFICATION_ID, notification); } else { Intent sIntent = new Intent(context, MainActivity.class); sIntent.putExtra("ACTION", "main"); sIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); sIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(sIntent); }
원인은 간단한 곳에 있었다. Notification 생성시 setFullScreenIntent를 설정하는 경우 매니페스트에 USE_FULL_SCREEN_INTENT권한을 추가해야한다. 왜 이걸 까먹고 있었을까…
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />