Android

[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" />

Leave a Reply

error: Content is protected !!