본문 바로가기
개발 log (개발)/mobile

'알람기능' 구현을 위한 이론(PendingIntent, AlarmManager)

by abbear25 2016. 8. 15.

 'PendingIntent'는 

  Alarm이나 Notification에 intent를 등록하기 위해서 사용

  PendingIntent를 이용해서는 activity, broadcast, service를 실행 시킬 수 있다.

  따라서 getActivity, getBroadcast, getService 메소드로 생성할 수 있게 되어있다.


  1. 실행시키고 싶은 정보가 담긴 Intent 작성

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


  2. PendingIntent작성(4개의 parameter에 대해서)

      PendingIntent pending; 

      pending = PendingIntent.getBroadcast(context, id 값, intent, flag);

      1번째 param, context 정보

      2번째 param, 여러개의 알람을 등록하기 위한 primary id 값 셋팅

      3번째 param, 실행시키고 싶은 정보가 담긴intent

      4번째 param, flag


      flag의 종류는 param과 같이 4개가 존재

      1번째, FLAG_ONE_SHOT : 한번만 사용하겠다 정의

      2번째, FLAG_NO_CREATE : 현재 생성된 PendingIntent 정보 반환

      3번째, FLAG_CANCEL_CURRENT : 이미 실행중이면 취소후에 새로 만듬

      4번째, FLAG_UPDATE_CURRENT : 이미 실행중이면 extra Data만 교체


 'AlarmManager'는 특정 시간에 작업을 수행하기 위해 사용


  1. AlarmManager 생성

     AlarmManager aManager;

     aManager = (AlarmManager)context.getSystem(Context.ALARM_SERVICE);


  2. 셋팅하기

     한 번만 실행하고 싶은 경우

     aManager.set(시간 기준, 동작할 시간, pending);


     특정 시간 마다 반복하고 싶은 경우

     aManager.setRepeating(시간 기준, 동작할 시간, 반복할 간격, pending);


     시간 기준

     AlarmManager.ELAPSED_REALTIME : 단말기가 부팅된 이후 경과된 시간을 기준

     AlarmManager.ELAPSED_REALTIME_WAKEUP  : 

위와 동일+대기상태일 경우단말기 활성시켜서 작업을 수행

     위 기준일 경우 동작할 시간 SystemClock.elapsedRealtime()를 사용


     AlarmManager.RTC : 실제 시간을 기준

     AlarmManager.RTC_WAKEUP 

위와 동일+대기상태일 경우 단말기 활성시켜서 작업을 수행

위 기준일 경우 동작할 시간에 System.currentTimeMillis()를 사용


반응형