본문 바로가기

Android/개념 및 예제

Android Notification Example (+Channel)

알림 창에 나온 알림

안드로이드의 경우 8버전(오레오, API 26) 이후에는 알림 기능을 위해서는 알림에 대한 Channel을 설정해야 한다.

 

알림의 구현 과정

 

1. 알림 Channel을 만든다. (앱 설정에 UI에서는 Category라고 나온다.)

2. 알림을 설정하고 사용자에게 알림을 보낸다. 

 

 

알림 구현 코드

 

1. 알림 Channel을 만든다.

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 오레오 버전 이상인 경우에 알림 채널을 만든다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
	// 채널 아이디, 이름, 중요도 수준을(긴급=알림음 울리고 헤드업 알림 표시됨) 정함
	NotificationChannel notificationChannel = new NotificationChannel(getString(R.string.channel_id), getString(R.string.channel_name), NotificationManager.IMPORTANCE_HIGH);
    	// 알림 채널 설명을 정함
  	notificationChannel.setDescription(getString(R.string.channel_desc));
    	// 알림시 빛 사용 여부를 정함
  	notificationChannel.enableLights(true);
    	// 알림 색상을 정함
    	notificationChannel.setLightColor(Color.RED);
    	notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
        // 알림 채널을 만듬
    	notificationManager.createNotificationChannel(notificationChannel);
}

알림 중요도의 경우 4단계가 있는데 NotificationManager.IMPORTANCE_HIGH의 가장 높은 단계로 설정하면

진동, 소리 뿐만 아니라 다음 이미지처럼 위에서 내려오는(헤드업) 알람을 보낼 수 있다.

또한 앱 아이콘 클릭시 알림에 대한 미리보기가 가능하다.

 

중요도 설정을 통한 헤드업 알람

 

2. 알림을 설정하고 사용자에게 알림을 보낸다. 

// 알림 설정하기
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

// 펜딩 인텐트 설정
Intent notiIntent = new Intent(MainActivity.this, MainActivity.class);
// 기존에 해당 테스크가 없으면 새로운 task를 만들면서 생성함
notiIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
notiIntent.putExtra("data", "data");
// getActivity -> 액티비티를 시작하는 인텐트를 생성함
PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, notiIntent, PendingIntent.FLAG_UPDATE_CURRENT);

try {
    notification = new NotificationCompat.Builder(getApplicationContext(), getString(R.string.channel_id))
        .setSmallIcon(R.drawable.ic_launcher_background)
        .setContentTitle(getString(R.string.noti_title))
        .setContentText(getString(R.string.noti_content) + ad)
        .setLargeIcon(Glide.with(MainActivity.this).asBitmap().load("https://cdn.pixabay.com/photo/2020/01/02/10/52/monk-4735530_960_720.jpg").into(255, 255).get())
        // 유저가 알림을 클릭하면 알림 리스트에서 자동으로 사라지게 함
        .setAutoCancel(true)
        // 앞에서 만든 알림 채널 아이디를 명시 해야함
        .setChannelId(getString(R.string.channel_id))
        // 설정한 펜딩인텐트 ㅁ명시
        .setContentIntent(pendingIntent)
        .build();

    if (notificationManager != null) {
        // 알림을 사용자에게 보내기
        notificationManager.notify(1, notification);
    }
  } catch (ExecutionException | InterruptedException e) {
  	e.printStackTrace();
  }

 

알림을 설정할 때 펜딩 인텐트를 사용해 액티비티, 서비스, 리시버 등의 컴포넌트를 사용해 작업을 수행할 수 있다.

 

공식문서