공부용 블로그

(4)Notification_알림 액션 버튼 추가하기 본문

Android

(4)Notification_알림 액션 버튼 추가하기

tomato212 2020. 8. 6. 17:35

알림 액션 버튼은 알림과 관련된 작업을 앱을 열지 않고 바로 처리할 수 있도록 해준다.

 

알림은 최대 세 개의 액션 버튼을 가질 수 있다.

 

1. LEARN MORE, UPDATE 버튼

사용자가 알림을 탭한 후 관련 액티비티로 넘어가는 것 말고도 액션 버튼들을 사용해서 다양한 작업들을 할 수 있다. 

예를들어, 백그라운드 작업(파일업로드, 전화받기, 알람 중지, 음악 재생 등)을 할 수 있고, 

Android 7.0 (API level 24) 이상이라면 액션 버튼을 통해서 알림으로부터 바로 메세지에 응답할 수 있다.

알림 액션 버튼은 NotificationCompat.Builder 클래스의 addAction() 메서드를 사용하고, 파라미터로 아이콘, 라벨스트링, 펜딩인텐트를 넣는다.

 

그럼 아래 순서대로 적용해보자.

1. updateNotification ()을 호출하는 Broadcast Receiver 구현

액션 버튼을 눌러 어떠한 액션이 이루어지려면 우선 인텐트를 통해 어떤 액션인지 알아야한다.

따라서 브로드캐스트 리시버를 구현하고 onReceive() 메서드에서 인텐트를 받을 것이다.

    public class NotificationReceiver extends BroadcastReceiver {

        public NotificationReceiver() {
        
        }

        @Override
        public void onReceive(Context context, Intent intent) {
        
            if (intent.getAction().equals(ACTION_UPDATE_NOTIFICATION)) {

                updateNotification();
            }
        }
    }

 

onReceive() 메서드로 들어온 인텐트의 액션이 무엇인지 구분하기 위해 다음과 같은 변수를 선언한다.

이 값은 패키지내에서 고유한 값으로 해야한다.

   private static final String ACTION_UPDATE_NOTIFICATION = 
        "com.example.android.notifyme.ACTION_UPDATE_NOTIFICATION";

리시버를 등록하기 위해 다음 줄 입력

private NotificationReceiver mReceiver = new NotificationReceiver();

onCreate() 안에 다음 줄 입력

registerReceiver(mReceiver,new IntentFilter(ACTION_UPDATE_NOTIFICATION));

메모리 관리를 위해 사용하지 않을땐 등록된 리시버를 해지해줘야 한다.

@Override
protected void onDestroy() {
unregisterReceiver(mReceiver);
   super.onDestroy();
}

 

2. 업데이트를 위한 아이콘 등록

안드로이드 스튜디오에서 File > New > Image Asset 선택

Icon Type 드롭다운 리스트에서 Action Bar and Tab Icons 를 선택

Clip Art 선택

ic_update 아이콘 선택, next > finish

 

* Android 7.0 부터 아이콘은 보이지 않고 대신 텍스트가 있는 라벨영역이 더 넓어졌다.

하지만 구버전과 안드로이드 웨어와 같은 기기들을 위해 등록해두는 것이 좋다.

 

3. 업데이트 액션버튼을 notification 에 추가

mainActivity.java 에 sendNotification() 메서드안에 다음 스텝을 따라간다.

(1) 메서드 시작부분에 인텐트 생성

(2) Pending Intent를 만들기 위해 getBroadcast 사용(딱 한번만 보내고 사용할 것이므로 FLAG_ONE_SHOT)

Intent updateIntent = new Intent(ACTION_UPDATE_NOTIFICATION);
PendingIntent updatePendingIntent = PendingIntent.getBroadcast
          (this, NOTIFICATION_ID, updateIntent, PendingIntent.FLAG_ONE_SHOT);

(3) NotificationCompat.Builder의 객체를 생성한 부분 뒤에 addAction() 메서드를 사용

파라미터로 아이콘, 라벨 텍스트, 펜딩인텐트를 전달해준다.

notifyBuilder.addAction(R.drawable.ic_update, "Update Notification", updatePendingIntent);

 

4. 앱 실행

Notify Me! 버튼을 탭하고 홈버튼을 누른다. 화면 상단에 떠 있는 알림을 오픈하고 Update Notification 을 탭하면 알림이 업데이트된다.