마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ALARM manager 정확한 시간에 작동되지 않네요.. 원인이 무엇인가요?

0 추천
private void setAlarm(int alarmId,int h,int m){
	Intent intent = new Intent(ServiceClass.this,Manual.class);		
	PendingIntent sender = PendingIntent.getActivity(mContext, alarmId, intent, PendingIntent.FLAG_CANCEL_CURRENT);
	mManager = (AlarmManager)getSystemService(ALARM_SERVICE);
	calendar.set(Calendar.HOUR_OF_DAY, h);
        calendar.set(Calendar.MINUTE, m);
        calendar.set(Calendar.SECOND, 0);
    
        mManager = (AlarmManager)getSystemService(ALARM_SERVICE);

        mManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 0, sender);
	Log.e(TAG, "해당 알람번호 : "+alarmId +"|| 알람 설정 시간 : " + calendar.getTime().toString());
}

위와 같이 알람매니저를 사용하여 알람을 등록하였는데요

setRepeating을 사용하여서 하니 제시간에 intent로 넘어가지 않고, 

몇초간 이후 intent로 사용이 되더라구요.

찾아보니 SDK에 따라 다르게 설정해줘야한다고 하는데...

sdk 19부터는 setexact, 21부터는 setalarmcolck메서드를 사용해야한다고 하더라구요..

(http://www.masterqna.com/android/56133/alarmmanager-%EC%95%8C%EB%9E%8C%EC%9D%B4-%EC%A0%95%ED%99%95%ED%95%9C-%EC%8B%9C%EA%B0%84%EC%97%90-%EA%B9%A8%EC%96%B4%EB%82%98%EC%A7%80-%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4?show=56133#q56133)

 

현재 테스트 스마트폰은 안드로이드 6.0(API 23)이고요.

Project Build Target은 4.1.2(api 16)입니다.

 

 if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN)

SDK에 따라 따로 해줄려고 해도 Build.version_codes에 젤리빈까지밖에 뜨지가 않더라구요...

 

해결 방법이 있는가요?

 

쿠쿠부다스 (6,470 포인트) 님이 2017년 2월 27일 질문

2개의 답변

0 추천
 
채택된 답변
1. android 는 realtime os가 아니므로 특정한 작업을 한치의 오차도 없이 정확한 시간에 실행하는 것은 불가능합니다.

2. compileSdkVersion을 올리면 될 겁니다.
익명사용자 님이 2017년 2월 27일 답변
쿠쿠부다스님이 2017년 2월 28일 채택됨
그러면 알람같은 앱은 어떻게 정확한 시간에 동작하는지 알수있을가요?
0 추천
알람을 진지하게 만들어 보진 않았지만, 아래 포스트를 보고 해봤는데 잘되더군요

참고해보세요

https://moka-a.github.io/android/android-alarm/
prague (26,200 포인트) 님이 2017년 2월 27일 답변
...