본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Notification 에 대한 모든 것.

by 돼지왕 왕돼지 2012. 2. 18.
반응형


안녕하세요. 돼지왕 왕돼지입니다.
오늘은 Notification 에 대한 모든 것 이라는 주제로 Notification 에 대해 한번 알아보도록 하죠. 
 

Android, android.permission.vibrate, API, cancel, cancelall, contentintent, contentview, custom 진동, defaults, default_all, default_lights, default_sound, default_vibrate, Example, Flags, flag_activity_new_task, flag_auto_cancel, flag_insistent, flag_no_clear, flag_ongoing_event, flag_only_alert_once, flag_show_lights, getactivity, getbroadcast, getservice, getSystemService, Icon, ledargb, ledoffms, ledonms, notificatino 등록, notification, notification cancel, notification 취소, notificationview, Notify, number, PendingIntent, permission, RemoteView, setlatesteventinfo, sound, tickertext, URI, Vibrate, when, wrapping, [Android/안드로이드] Notification 에 대한 모든 것., 래핑, 모든 것, 시스템 관리, 실행 권한, 안드로이드, 인텐트


Notification APIs.

  
Notification (int icon, CharSequence tickerText, long when);
 
<Notification class 의 field> 
 필드 설명 
 number
 Notification Icon에 겹쳐서 출력될 숫자 지정
 ex) 메세지 여러개 도착시 덮어쓰면서 숫자를 표시할 수 있다.
      0이나 음수시 숫자 표시 X  
 sound  Notification 시 출력할 소리를 Uri 객체로 지정   
 vibrate    진동방식 지정, 진동시간과 멈출 시간을 배열로 전달   
 ledARGB    불빛의 색상 지정. LED 능력에 따라 표현능력 다름   
 ledOnMs, ledOffMs    LED 켤 시간과 끌 시간을 msec 단위로 지정.   
 defaults    디폴트   
 flags    Notification의 동작 방식 지정   
 contentView  Custom ContentView 지정
 contentIntent  Notification ContentView 를 클릭했을 때 실행시킬 intent.
 

<알람 방식 관련 flags> 

 플래그 설명 
 DEFAULT_SOUND   소리를 발생   
 DEFAULT_VIBRATE   진동을 발생   
 DEFAULT_LIGHTS   불빛을 깜박거림   
 DEFAULT_ALL   위 세가지 동작 모두 수행   
 

<알람 관련 flags> 
 플래그 설명   
 FLAG_AUTO_CANCEL  

사용자가 아이콘을 탭하면 자동으로 노티를 없앤다

 FLAG_INSISTENT  

취소하거나 status bar를 확장하기 전까지 소리 계속 발생   

 FLAG_NO_CLEAR   사용자가 clear all을 선택할 때 노티가 제거되지 않는다.
 FLAG_ONGOING_EVENT  

계속 진행중인 이벤트를 참조할 때 사용

 FLAG_ONLY_ALERT_ONCE  

확인하면 알림이 자동 제거

 FLAG_SHOW_LIGHTS  

LED 불빛을 출력  

 
void setLatestEventInfo (Context context, CharSequence contentTitle, CharSequence contentText, PendingIntent contentIntent)
    : Notification을 발생시킨 주체와 제목, 메시지 내용 문자열 등을 지정하고 Notification view 를 탭했을 때 호출할 인텐트 지정
 



PendingIntent.

 
   : 인텐트를 래핑하며 다른 응용 프로그램으로 전달하여 실행 권한을 준다. 이는 시스템이 관리하며 인텐트를 만든 응용 프로그램이 종료되어도 유효하다.
  
PendingIntent getActivity (Context context, int requestCode, Intent intent, int flags)
PendingIntent getBroadcast (Context context, int requestCode, Intent intent, int flags)
PendingIntent getService (Context context, int requestCode, Intent intent, int flags)
   -> FLAG_ACTIVITY_NEW_TASK 플래그 지정 (Notification 에는)








NotificationService


getSystemService( Context.NOTIFICATION_SERVICE );
 
void notify (int id, Notification notification)
void cancel (int id)
void cancelAll ()
 
  


example

 
  <Notification 등록>

static final int NAPNOTI = 1;
NotificationManager mNotiManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
 
postDelayed(new Runnable(){
   public void run(){
      Notification noti = new Notification(R.drawable.napalarm, "Wake up!", System.currentTimeMillis());
      noti.defaults |= Notification.DEFAULT_SOUND;
      noti.flags |= Notification.FLAG_INSISTENT;
 
      Intent intent = new Intent (.this .class);
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      PendingIntent content = PendingIntent.getActivity(.this, 0, intent, 0);
      noti.setLatestEventInfo(.this, "Wake up time", "Wake up! It's time to work", content);
      mNotiManager.notify(class.NAPNOTI, noti);
   }
}, 5*1000);


 
 <Notification 취소>

NotificationManager NM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
NM.cancel(class.NAPNOTI);

 
cf) noti.vibrate = new long[] {1000, 1000, 500, 500, 200, 200, 200, 200, 200, 200};
       : 1초, 1초쉬기, 0.5초, 0.5초 쉬기 이런 패턴
 
cf2) 커스톰 진동 패턴을 주려면 permission 필요! 
 <uses-permission android:name="android.permission.VIBRATE"/>
 




Custom Notification View

   
RemoteViews (String packageName, int layoutId)
 -> 뷰 표시는 운영체제가 하기 때문에 통상적인 뷰로는 안 되며, RemoteView 클래스 객체로 생성해야만 함
 
<example>

Notification noti = new Notification(R.drawable.napalarm, "Wake up", System.currentTimeMillis());

noti.defaults |= Notification.DEFAULT_SOUND;

noti.flags |= Notification.FLAG_INSISTENT;

         

Intent intent = new Intent(.this, .class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent content = PendingIntent.getActivity(CustomNotiView.this, 0, intent, 0);

         

RemoteViews napView = new RemoteViews(getPackageName(), R.layout.service_customnotiview);

noti.contentView = napView;

noti.contentIntent = content;

         

mNotiManager.notify(NapAlarm.NAPNOTI, noti);

  






반응형

댓글