본문 바로가기

Android/Date

안드로이드/Android 알람매니저(AlarmManger)를 사용해서 알람(Alarm) 등록하기~!


 < 개발 환경 > 
   SDK 버전 : 안드로이드 SDK 2.2  
   API LEVEL : 8 
   이클립스 버젼 : Indigo
   테스트단말 : 삼성갤럭시 S2




안드로이드/Android 알람매니저(AlarmManger)를 사용해서 알람(Alarm) 등록하기~!



이미지 출처 : http://www.funshop.co.kr/vs/detail.aspx?categoryno=1338&itemno=8041



안드로이드에서 알람(Alarm)은 우리가 현재 사용하는 알람이라고 생각하시면 됩니다. 평소 시계나 휴대폰 알람을 맞춰 놓고 매일 아침 기상시간, 특정한 날, 꼭 잊지 말아야 할 시간이 왔을 때 나에게 알려주는 용도로 사용하는데요..!! 안드로이드 알람(Alarm) 도 마찬가지로 내가 꼭 필요한 시점에 한번, 또는 매번 반복하는 기능을 제공 합니다.


자 그럼 사용 방법에 대해 알아 보겠습니다.~!


package arabiannight.tistory.com.alarmmanager;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class TestAlarmManagerActivity extends Activity implements OnClickListener{
	
	private static final String TAG = "TestAlarmManagerActivity";
	private static final String INTENT_ACTION = "arabiannight.tistory.com.alarmmanager";
	
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        setLayout();
        
    }

	@Override
	public void onClick(View v){
		switch (v.getId()) {
		case R.id.btn_set_alarm:
			setAlarm(this, 5000);
			Toast.makeText(getApplicationContext(), "setAlarm()", Toast.LENGTH_SHORT).show();
			break;
			
		case R.id.btn_release_alarm:
			releaseAlarm(this);
			Toast.makeText(getApplicationContext(), "releaseAlarm()", Toast.LENGTH_SHORT).show();
			break;

		default:
			break;
		}
	}
	
	// 알람 등록
	private void setAlarm(Context context, long second){  
		Log.i(TAG, "setAlarm()"); 
		AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

		Intent Intent = new Intent(INTENT_ACTION);
		PendingIntent pIntent = PendingIntent.getActivity(context, 0, Intent, 0);
		
		alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + second, pIntent);
	}
	
	// 알람 해제
	private void releaseAlarm(Context context){  
		Log.i(TAG, "releaseAlarm()"); 
		AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

		Intent Intent = new Intent(INTENT_ACTION);
		PendingIntent pIntent = PendingIntent.getActivity(context, 0, Intent, 0);
		alarmManager.cancel(pIntent);
		
		// 주석을 풀면 먼저 실행되는 알람이 있을 경우, 제거하고
		// 새로 알람을 실행하게 된다. 상황에 따라 유용하게 사용 할 수 있다.
//		alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 3000, pIntent);
	}
	
	/*
	 * Layout
	 */
	private Button[] mButtons;
	
	private void setLayout(){
		mButtons = new Button[]{
			(Button) findViewById(R.id.btn_set_alarm),
			(Button) findViewById(R.id.btn_release_alarm)
		};
		
		for(Button b : mButtons)
			b.setOnClickListener(this);
		
	}
	
}


알람 등록 하는 부분 입니다. 등록한 초(second) 시간이 되면, PendingIntent 를 실행해 줍니다. PendingIntent 에는 Intent 를 추가해 주기 때문에, 해당 Intent Action을 가진 Intent를 호출해 줍니다.

// 알람 등록
	private void setAlarm(Context context, long second){  
		Log.i(TAG, "setAlarm()"); 
		AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

		Intent Intent = new Intent(INTENT_ACTION);
		PendingIntent pIntent = PendingIntent.getActivity(context, 0, Intent, 0);
		
		alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + second, pIntent);
	}



getActivity 대신 브로드캐스트를 호출하고 싶으면 getBroadcast , 서비스를 호출하고 싶으면, getService 를 호출 하시면 됩니다.

 

 PendingIntent pIntent = PendingIntent.getActivity(context, 0, Intent, 0);



PendingIntent를 사용하지 않고, Activity를 호출하는 또 하나의 방법은 Intent.FLAG_ACTIVITY_NEW_TASK 를 추가 하셔서 호출 하는 방법이 있습니다.


만약 반복 사용을 위한 알람을 등록하고 싶으시면 alarmManager.setRepeating 메서드를 이용하시면 반복되는 알람 작업을 수행 할 수 있습니다.



알람을 해제 하는 부분 입니다.

	// 알람 해제
	private void releaseAlarm(Context context){  
		Log.i(TAG, "releaseAlarm()"); 
		AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

		Intent Intent = new Intent(INTENT_ACTION);
		PendingIntent pIntent = PendingIntent.getActivity(context, 0, Intent, 0);
		alarmManager.cancel(pIntent);
		
		// 주석을 풀면 먼저 실행되는 알람이 있을 경우, 제거하고
		// 새로 알람을 실행하게 된다. 상황에 따라 유용하게 사용 할 수 있다.
//		alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 3000, pIntent);
	}



alarmManager.cancel(PendingIntent pendingintent) 를 넣어주시면, 해당 Intent의 Action을 가진 PendingInetnt를 제거해 줍니다. 자 어떠신가요?ㅎㅎ 꼭 한번씩 사용해 보시고, 유용하게 사용하셨으면 좋겠습니다.


파일첨부 :



스크린샷 :