[Android] Notification에 큰 이미지 적용하기

Posted by Find my true self Fimtrus
2014.12.30 14:47 Programming/Android

최근에 많은 앱들이 젤리빈(Android 4.1) 버전에서 추가된 BicPictureStyle을 이용하여 


노티바에 큰 이미지를 보여주고 있다.



두손가락을 이용해 위로 드래그 하게 되면 접히고, 아래로 드래그 하면 큰이미지가 보이면서 열리게 된다.


즉..접혔을때의 컨텐츠와 열렸을때 서로 다른 컨텐츠를 지정할 수 있다.


필자는 다양한 버전을 지원하기 위해 v4 support library를 사용하였으며


해당 값들의 세팅은 임의로 지정하였다.



/**
  * 먼저 NotificationCompat Builder를 선언한다.
  *  Builder의 경우 접혔을 때 노티바에 표시할 컨텐츠를 설정한다.
  */
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
	.setSmallIcon(R.drawable.ic_launcher) //작은아이콘 세팅
	.setContentTitle(context.getResources().getString(R.string.title) ) //노티바에 표시될 타이틀
        .setContentText(context.getResources().getString(R.string.message) ) //노티바에 표시된 Description
        .setAutoCancel(true) //클릭하게 되면 사라지도록...
        .setVibrate(new long[] { 1000, 1000 }) //노티가 등록될 때 진동 패턴 1초씩 두번.
        .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE); //노티가 등록될 때 사운드와 진동이 오도록, 기본 사운드가 울리도록.

/**
  * 두 손가락으로 드래그 했을 때 표시된 컨텐츠를 설정한다.
  */
BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle(builder); //상단의 빌더를 인자로 받음..
Bitmap bigPictureBitmap  = BitmapFactory.decodeResource(context.getResources(), R.drawable.i_hero); //드래그 후 공간에 표시할 이미지.
	bigPictureStyle.bigPicture(bigPictureBitmap) //상단의 비트맵을 넣어준다.
	.setBigContentTitle(context.getResources().getString( R.string.big_title) ) //열렸을때의 타이틀
	.setSummaryText(context.getResources().getString( R.string.big_message) ); //열렸을때의 Description


위와 같이 설정을 하게 되면 기존에 드래그해도 반응이 없던 노티가


아래로 커지면서 큰이미지를 표시하게 된다.


혹시...이해가 잘안된다면 아래 샘플을 참고..



notificationSample.zip



이 댓글을 비밀 댓글로
    • 안녕하세요
    • 2015.05.11 17:00
    안드로이드 개발에 많은 도움이 되었습니다. 감사합니다.
    한 가지 질문이 있습니다 ~
    BigPictureStyle 를 이용하여 push 알림에 이미지를 추가까지 완료를 하였는데요..
    닫힌 상태로 push 알림이 와 두 손가락을 이용하여 드래그하여야 expand 가 되어 이미지가 나오는데 처음 푸시 상태에서 이미지가 열림 상태로 나오게 하는 방법이 있나요?
    • 안녕하세요

      답변이 조금 늦었네요.

      expand 관련 메쏘드는 존재하지 않는 것 같아요.

      아무래도 여러개의 앱들의 푸시가 모두 펼쳐져 있으면 유저로서 불편함을 느낄 수 있기 때문이지 않을까 생각이 드네요.

[Android] Notification 에서 onNewIntent가 타지 않는 문제. How to call onNewIntent from Notification.

Posted by Find my true self Fimtrus
2014.06.26 11:40 Programming/Android

launchMode 가 singleTask 혹은 singleTop 인 Activity에 intent를 보내게 되면,


존재 할 경우 onNewIntent, 존재하지 않을 경우 Activity가 새로 시작하게 된다.


일반적인 방법으로 액티비티를 호출할 때에는 startActivity로 호출하지만,


Notification을 통해 호출할 경우 PendingIntent를 사용하는데,


액티비티의 모드가 singTask, singleTop 이며 존재하는데도 


강제로 액티비티를 재시작시키는 경우가 있다.

(아마도..안드로이드 레퍼런스에 코드만 보고 만들어서 그런건 아닐까 생각이 든다.)


정상적인 Activity lifecycle을 태우기 위해선, PendingIntent 생성시 requestCode를 반드시 넣어야한다.

(대부분 default값으로 0을 넣는다)




대부분 REQUEST_CODE 부분에 0 을 넣는데, private 한 값을 추가시켜주면, 정상적으로 onNewIntent가 불린다.

PendingIntent resultPendingIntent = PendingIntent.getActivity(
        context, REQUEST_CODE, 
        resultIntent, 
        PendingIntent.FLAG_UPDATE_CURRENT);



이 댓글을 비밀 댓글로
    • 날개
    • 2014.11.07 15:14
    private 한 값이 무엇인가요 ?
    • 2015.10.06 09:54
    비밀댓글입니다