태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

젤리빈(Android 4.1)에서 추가된 다양한 Notification을 사용해보자!

2012.07.17 12:30



안드로이드 4.1(젤리빈)에서 다양한 형태의 알림(Notification)이 추가되었습니다.

뿐만 아니라, 이전의 약간은 '어중간했던' 알림 생성 및 공지 방법이 깔끔하게 보강되었습니다.


이번 포스트에서는 예제 프로젝트를 통해 젤리빈에서 추가된 알림을 띄워보도록 하겠습니다.


젤리빈에서 크게 3가지의 알림 스타일이 추가되었습니다. 

추가로, 알림에 '액션'을 할당할 수 있어 기존에 '알림'을 눌러 동작을 실행해야 했던 것에서 벗어 나

다양한 작업을 사용자에게 쉽게 노출시킬 수 있게 되었습니다.


허니컴부터 알림 생성을 더욱 쉽게 할 수 있는 Notification.Builder 클래스가 추가되었으며,

젤리빈에서도 이 클래스를 사용하여 다양한 형태의 알림을 쉽게 생성할 수 있습니다.


Notification.Builder 클래스를 통해 알림의 여러 속성을 지정하고,

최종으로 build() 메서드를 호출하여 Notification 객체를 생성하는 구조로 되어있습니다.

마지막으로 이를 NotificationManager의 notify() 메서드를 사용하여 띄울 수 있습니다.


BigPictureStyle


알림에 큰 이미지가 들어간 알림 스타일입니다.

알림은 다음과 같이 표시됩니다.



젤리빈에서는 각 형태의 Notification을 쉽게 생성할 수 있도록 각 알림 스타일을 미리 제공하고 있습니다.

여기에서는 Notification.BigPictureStyle을 사용하면 됩니다. BigPictureStyle 알림을 생성하는 코드와

코드가 영향을 미치는 부분을 그림으로 표현하면 다음과 같습니다.



위에서 addAction()의 intent에는 버튼을 눌렀을 때 실행할 동작을 포함하는 PendingIntent를 대입하면 됩니다.



BigTextStyle


BigTextStyle은 알림에 긴 내용의 텍스트를 표시합니다.

단순히 짧은 내용의 알림이 아니라 문자메시지 내용, 이메일 본문 등 많은 내용을 보여줘야 하는 경우에 사용하면 유용합니다.

BigTextStyle 알림은 다음과 같이 표시됩니다.



BigTextStyle 알림을 생성하는 코드와, 각 코드와 알림 요소간의 관계를 그림으로 나타내면 다음과 같습니다.




InboxStyle


InboxStyle은 이름에서 유추할 수 있듯이 '받은편지함'과 같이 여러 항목을 표시해야 하는 알림에 적합합니다.

하나의 알림에 최대 5개 항목까지 표시할 수 있습니다. 알림이 표시되는 모습은 다음과 같습니다.



InboxStyle 알림을 생성하는 코드와 알림 요소와의 연결관계는 다음과 같습니다.





ProgressBar


젤리빈에서 추가된 것은 아니지만 (ICS에서 추가됨) 유용하게 사용할 수 있으리라 생각되어 하나 더 다뤄봅니다.

컨텐츠 다운로드/업로드 상태, 혹은 작업 상태를 알림으로 쉽게 표시할 수 있는 ProgressBar 형태입니다.

다음과 같이 알림에 ProgressBar가 들어가 있습니다.



Progress는 Notification.Builder의 setProgress() 메서드를 사용하여 설정할 수 있습니다.

setProgress()의 세번째 인자를 true로 하면 Indeterminate상태의 ProgressBar를 표시하도록 할 수 있습니다.


public Notification.Builder setProgress(int max, int progress, boolean indeterminate)

알림의 진행 정도를 설정합니다.


setProgress()를 사용하는 알림을 생성하는 코드와 알림간의 상관관계를 그림으로 표현하면 다음과 같습니다.





커니 유저 인터페이스/알림(Notification) , , , , , , , , ,

  1. Blog Icon
    견가가

    안녕하세요~ Notification 강좌 잘 보았습니다.

    addAction 부분 관련하여 구현할 일이 있어 구현중인데요~

    혹 Expanded 는 특별히 flag를 넣어주어야 보이는 건가요?

    단말에 올려서 확인시 expanded 로 안나오는것 같아서 collapsed 와 달리 별도로 조건이 필요한가 해서요 ^^

  2. 저도 따로 플래그를 찾지는 못했는데, Priority를 조정하면 변화가 있지 않을까 추측해봅니다 :)

  3. 멋진 글 잘 보았습니다. :)

  4. 감사합니다!

  5. Blog Icon
    스크미

    제폰이 갤3젤리빈 이거든요??그런데 올려져 있는 파일로 헤보니까 똑같이 2줄로만 나오네요??업글을 해야되는것인지..ㅜㅜ

  6. 알림바를 두 손가락으로 아래로 당기면 확장됩니다~

  7. 알림바를 두 손가락으로 아래로 당기면 확장됩니다~

  8. 알림을 두 손가락으로 쓸어내리면 숨겨진 내용이 보입니다 :)

  9. Blog Icon
    shhan

    고맙습니다. ㅠㅠ. 이틀동안 해매다가 커니님 덕분에 겨우 해결 되었네요.
    BigTextStyle 사용할때 bigText의 문구가 2줄이상 넘어갈때 처음부터 2줄이상 전부 보여주기 위해서는

    NotificationCompat.Builder builder = new NotificationCompat.Builder(Context);
    생략...
    builder.setPriority(NotificationCompat.PRIORITY_MAX); <-- 요게 핵심

    해주니깐 원하는대로 보이네요.
    참고하세요~

  10. Blog Icon
    초보자

    안녕하세요. 노티피케이션을 등록 할 때 리모트뷰를 사용해서 다양한 노티피케이션 바를 만들 수 있다는 사실을 알게 되었습니다.
    한가지 질문이 있는데 혹시 이미지뷰를 동적으로 추가해서 생성 할 순 없나요?
    이미지를 동적으로 추가 생성 했더니 노티바는 나오는데 이미지는 안나오는 결과가 나옵니다. 방법이..ㅜ?

  11. RemoteViews 에서 지원하는 뷰만 사용 가능합니다~

  12. Blog Icon
    YHB

    안녕하세요 현재 GCM을 이용한 푸시 메시지 구현중인데 현재 php 연동해서 메시지 보내는 것 까진 됐는데 이미지 url을 같이 보내서 하는 부분을 구현하고 싶은데 이것도 가능할까요?

  13. GCM 페이로드에 이미지 URL을 전송하는 것을 말씀하시는 건가요?

  14. Blog Icon
    YHB

    네 웹에서 url을 보내면 GCM에서 url을 같이 보내주면서 이미지 비트맵형식으로 뿌려주는 형태를 개발중이거든요..

  15. Blog Icon

    비밀댓글입니다

  16. Blog Icon
    JH

    Notification.builder 의 .addaction 을 이용해서 완전히 어플종료를 하고 싶은데 어떤 방법이 있을까요??