본문 바로가기

IT 이야기/안드로이드

Alarm & notification


안녕하세요?
프쟁이 입니다.


시스템 알람은 AlarmManager 클래스를 이용하여, 알람을 주기적으로 혹은,


한번만 발생을 시켜서, 알람발생 시점에 인텐트를 브로드캐스팅(방송)하면


BroadcastReceiver 클래스를 상속하여 오버라이딩한 onReceive 메소드에서


대기하고 있다가, 브로드캐스팅한 인텐트를 받아서 필요한 처리를 하시면 됩니다.


먼저 한번만 알람을 발생시키고, 끝나는 내용을 구현하겠습니다.


먼저 한번 알람을 발생시켜서 인텐트를 발송하는 내용을 다음과 같이 구현합니다.


//인텐트를 수신할 클래스를 설정
Intent intent = new Intent(현재액티비티클래스명.this, 인텐트수신클래스명.class);
PendingIntent sender = PendingIntent.getBroadcast(현재액티비티클래스명.this, 0, intent, 0);


//지금부터 30초후 시간을 구함..
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30);


//알람객체생성
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);


//알람객체의 set 메서드는 알람을 지정된 시간후에 한번만 발생시키게 됩니다.
//sender객체에서 지정한 인텐트수신자 클래스로 인텐트를 알람이 발생될 때 발송합니다.
//여기서 시간은 30초후로 설정했으므로, 지금부터 30초 후에 한번만 알람을 발생시켜,
//인텐트 수신자 클래스의 receive 메소드를 실행하게 됩니다.
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);


그럼 이제 인텐트를 수신하는 BroadcastReceiver 클래스를 상속받는 클래스를 정의하겠습니다.


먼저 인텐트 수신자 클래스 자바파일을 하나 만듭니다.


그리고 다음과 같이 클래스를 BroadcastReceiver 받도록 하여 정의합니다.


public class 클래스명 extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        //여기에서 알람이 발생하여 보낸 인텐트를 수신하여 처리를 해줍니다.
    }
}


이 인텐트 수신자 클래스는 액티비티형태로 실행되는 것이 아니라, 눈에 보이지 않게,


서비스 형태로 실행을 하여, 계속 실행이 되면서 인텐트가 방송되면 받아들여


onReceive 메소드를 실행하게 됩니다.


이 클래스는 AndroidManifest.xml 파일에 application 태그안에 다음과 같이


등록을 해주어야 합니다.


        <receiver android:name=".인텐트수신자클래스명" android:process=":remote" />


그리고 위에서는 한번만 실행되는 알람을 시작했지만, 알람을 주기적으로 반복해서


발생시키는 알람을 처리할 수 도 있습니다.


Intent intent = new Intent(현재액티비티클래스명.this, 인텐트수신클래스명.class);
PendingIntent sender = PendingIntent.getBroadcast(현재액티비티클래스명.this, 0, intent, 0);


//알람을 시작시킬 시간, 밀리세켠드 단위로 5000 이면 5초입니다.
//즉 5초후에 알람이 최초 발생이 시작됩니다.
long startTime = SystemClock.elapsedRealtime() + 5*1000;

//알람이 주기적으로 발생할 때, 주기시간입니다. 여기서는 5초단위로 계속해서
//알람이 발생됩니다.
long cycleTime = 5*1000;


AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
//알람객체의 setRepeating 메소드가 알람을 주기적으로 반복해서 발생시키게 됩니다.
//여기서는 5초후에 알람이 최초 발생을 하고, 5초단위로 계속해서 알람이 발생하게 됩니다.
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, startTime, cycleTime, sender);


그리고 위에서 반복적으로 계속 수행되는 알람을 종료하려면 다음과 같이 합니다.


Intent intent = new Intent(현재액티비티클래스명.this, 인텐트수신클래스명.class);
PendingIntent sender = PendingIntent.getBroadcast(현재액티비티클래스명.this, 0, intent, 0);
           
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
//알람객체의 cancel 메소드로 해당 알람을 종료시키게 됩니다.
am.cancel(sender);


그럼 모두들 즐프하세요 ^^


'IT 이야기 > 안드로이드' 카테고리의 다른 글

모토 글램 루팅 과정  (0) 2011.05.01
adb.exe 를 찾지 못할때  (0) 2011.05.01
Message Handler  (0) 2011.04.12
안드로이드 플랫폼  (0) 2011.03.29
안드로이드 수업 - 110329 - 인텐트 & 리소스  (0) 2011.03.29