2013-11-21 3 views
1

Nexus 4 - Android 4.3 - api_18에서 작업합니다.Android AlarmManager - 잠자기시 ELAPSED_REALTIME 알람이 계속 반복됩니다.

PendingIntentAlarmManager.ELAPSED_REALTIME으로 예약하면 장치가 절전 모드 일 때 알람이 내 BroadcastReceiver으로 계속 호출됩니다.

문서는 장치가 절전 모드로 전환 할 때 BroadcastReceiver 한 번만 호출 한 후 장치가 깨어 나면 말한다 :

는 장치가 잠 들어있는 동안, 그것은 까지 전달되지 않습니다 꺼지면

다음에 장치가 깨어납니다.

내 경우에는 장치가 잠 들어있을 때 BroadcastReceiver가 반복적으로 호출됩니다. 당신이 당신의 화면을 끄면

내 코드

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, 
          SystemClock.elapsedRealtime(), 
          DELAI_PLANNIF_TICK, 
          pendingIntent); 
+0

기기가 절전 모드로 전환되었음을 어떻게 알 수 있습니까? –

+0

안녕하세요. 좋은 질문입니다. 기기의 버튼으로 화면을 끕니다. 그리고 화면이 꺼지고 진드기가 생기면 나는 pm.isScreenOn()을 테스트하고 false입니다. 그 장치가 절전 모드에 있다고 가정 해 봅시다. –

+0

슬립 모드에서 CPU는 저전력 상태이므로 코드를 실행하지 않습니다 (알람에 의해 깨어날 수 있음). 일반적으로 화면이 꺼지면 몇 초 후에 발생합니다. – Piovezan

답변

0

, 안드로이드는 절전 모드에 있지 않습니다. 그것은 거기에 가고 있으며이 과정은 몇 초 이상 걸릴 수 있습니다. 일부 앱은 WakeLock을 얻고 화면이 꺼져있을 때 (예 : 오디오 재생 중) 작업을 계속할 수 있습니다. 내 생각 엔 장치가 절전 모드가 아니며 BroadcastReceiver의 동작이 예상대로입니다. PowerManager으로 작업하지 않으면 장치가 절전 모드로 들어가는 것을 방지해야합니다. 사용자가 기기와 상호 작용하지 않을 때 앱 실행을 중지해야하는 경우 이벤트 화면을 처리하는 것이 좋습니다.

+0

안녕하세요, 저는 2 시간 동안 테스트를 마치고 터미널이 잠자기 상태가되면 슬립 모드임을 확인했습니다. BroadcastReceiver가 계속 호출됩니다. 그렇지 않으면 좋은 대체 아이디어 인 화면 끄기 이벤트를 처리하십시오. –

관련 문제