2012. 8. 30. 23:14
Android - AlarmManager 안드로이드 이야기2012. 8. 30. 23:14
728x90
반응형
Android - AlarmManager
원본 출처:http://pheadra.tistory.com/entry/Alarm
○ 알람의 정의
- 미리 지정해 놓은 시간에 이벤트를 발생시키는 시스템 장치
- 장래의 특정 시점이나 일정 시간 후에 작업을 등록하고 싶을때 알림을 사용
- 알람은 운영제체가 관리하며 응용 프로그램 외부에서도 설정 가능.
- 응용 프로그램이 종료된 상태에서도 알람은 동작함
- 장치가 슬립 상태이더라도 장비를 깨워 응용 프로그램을 실행 시킬수 있다.
- 알람은 일종의 약속 시간 알림 기능을 보여주는데 현재 시점이후 일정 시간이 경과했을 때 BR을 호출한다.
○ 알람 메니지 얻기
AlarmManager am = context.getSystemService(Context.ALARM_SERVICE);
○ 알람 등록 함수
// 딱 한번
void set(int type, long triggerAtTime, PendingIntent operation)
// 주기를 정해 놓고 반복적
void setReating(int type, long tirggerAtTime, long interval, PendingIntent operation)
※ The kind of type
RTC_WAKEUP (0x0000 0000)
RTC (0x0000 0001)
ELAPSED_REALTIME_WAKEUP (0x0000 0002)
ELAPSED_REALTIME (0x0000 0003)
○ 알람 취소 함수
void cancel(PendingIntent operation)
예제 소스
AlarmTest.class
예제 소스2
SetAlarm.java
AlarmReceiver.java
< RECEIVER android:name=".AlarmReceiver" />
추가!!
여러 종류의 알람을 등록하고 싶을 때에는.. PendingIntent에 있는 request_code를 다르게 주면 된다.
Intent intent = new Intent(SetAlarm.this, AlarmReceiver.class);
PendingIntent appIntent =
PendingIntent.getBroadcast(SetAlarm.this, request_code, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), appIntent);
그리고 만약 BR에서 Intent로 데이터를 받을때 잘 안된다면.. pendingIntent의 플래그를 FLAG_UPDATE_CURRENT로 바꿔보자..
PendingIntent appIntent =
PendingIntent.getBroadcast(SetAlarm.this, request_code, intent, PendingIntent.FLAG_UPDATE_CURRENT);
- public class AlarmTest extends Activity {
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Intent intent = new Intent(AlarmTest.this, AlarmReceiver.class);
- PendingIntent sender = PendingIntent.getBroadcast(AlarmTest.this, 0,
- intent, 0);
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(System.currentTimeMillis());
- calendar.add(Calendar.SECOND, 10);
- am.set(AlarmManager.RTC, calendar.getTimeInMillis(), sender);
- }
- }
public class AlarmTest extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(AlarmTest.this, AlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmTest.this, 0, intent, 0); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 10); am.set(AlarmManager.RTC, calendar.getTimeInMillis(), sender); } }
예제 소스2
SetAlarm.java
- private OnClickListener mOneShotListener = new OnClickListener() { // 버튼 이벤트 리스너
- public void onClick(View v) {
- Intent intent = new Intent(SetAlarm.this, AlarmReceiver.class);
- PendingIntent appIntent =
- PendingIntent.getBroadcast(SetAlarm.this, 0, intent, 0);
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(System.currentTimeMillis());
- calendar.add(Calendar.SECOND, 0); // 0초 뒤에 발생..
- AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
- am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), appIntent);
- }
- };
private OnClickListener mOneShotListener = new OnClickListener() { // 버튼 이벤트 리스너 public void onClick(View v) { Intent intent = new Intent(SetAlarm.this, AlarmReceiver.class); PendingIntent appIntent = PendingIntent.getBroadcast(SetAlarm.this, 0, intent, 0); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 0); // 0초 뒤에 발생.. AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), appIntent); } };
AlarmReceiver.java
- public class AlarmReceiver extends BroadcastReceiver {
- private int YOURAPP_NOTIFICATION_ID;
- @Override
- public void onReceive(Context context, Intent intent) {
- Toast.makeText(context, R.string.app_name, Toast.LENGTH_SHORT).show();
- showNotification(context, R.drawable.alarm,
- R.string.alarm_message, R.string.alarm_message);
- }
- private void showNotification(Context context, int statusBarIconID,
- int statusBarTextID, int detailedTextID) {
- Intent contentIntent = new Intent(context, SetAlarm.class);
- PendingIntent theappIntent =
- PendingIntent.getBroadcast(context, 0, contentIntent, 0);
- CharSequence from = "Alarm Manager";
- CharSequence message = "The Alarm was fired";
- Notification notif =
- new Notification(statusBarIconID, null, System.currentTimeMillis());
- notif.setLatestEventInfo(context, from, message, theappIntent);
- NotificationManager nm =
- (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
- nm.notify(this.YOURAPP_NOTIFICATION_ID, notif);
- }
- }
public class AlarmReceiver extends BroadcastReceiver { private int YOURAPP_NOTIFICATION_ID; @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, R.string.app_name, Toast.LENGTH_SHORT).show(); showNotification(context, R.drawable.alarm, R.string.alarm_message, R.string.alarm_message); } private void showNotification(Context context, int statusBarIconID, int statusBarTextID, int detailedTextID) { Intent contentIntent = new Intent(context, SetAlarm.class); PendingIntent theappIntent = PendingIntent.getBroadcast(context, 0, contentIntent, 0); CharSequence from = "Alarm Manager"; CharSequence message = "The Alarm was fired"; Notification notif = new Notification(statusBarIconID, null, System.currentTimeMillis()); notif.setLatestEventInfo(context, from, message, theappIntent); NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(this.YOURAPP_NOTIFICATION_ID, notif); } }Manifest.xml
< RECEIVER android:name=".AlarmReceiver" />
추가!!
여러 종류의 알람을 등록하고 싶을 때에는.. PendingIntent에 있는 request_code를 다르게 주면 된다.
Intent intent = new Intent(SetAlarm.this, AlarmReceiver.class);
PendingIntent appIntent =
PendingIntent.getBroadcast(SetAlarm.this, request_code, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), appIntent);
그리고 만약 BR에서 Intent로 데이터를 받을때 잘 안된다면.. pendingIntent의 플래그를 FLAG_UPDATE_CURRENT로 바꿔보자..
PendingIntent appIntent =
PendingIntent.getBroadcast(SetAlarm.this, request_code, intent, PendingIntent.FLAG_UPDATE_CURRENT);
728x90
반응형
'안드로이드 이야기' 카테고리의 다른 글
안드로이드 - Customizing AutoCompleteTextView to display images and text in the suggestion list using SimpleAdapter in Android (2) | 2012.09.01 |
---|---|
안드로이드 - autocompletetextview customize (0) | 2012.09.01 |
안드로이드 - 근접센서 간단 예제 (0) | 2012.08.29 |
안드로이드 - 기기의 마이크로 들어오는 소리의 데시벨을 구하는 방법 (0) | 2012.08.29 |
안드로이드 - 화면 캡쳐하기 (0) | 2012.08.29 |