2012-04-18 2 views
5

AlarmManagr을 반복 시간으로 설정했습니다.AlarmManager가 절전 모드로 작동하지 않습니다.

public void setAlarmManager(Context context, Intent intent) {   
    PendingIntent pendingIntent; 
    pendingIntent = PendingIntent.getService(context, 0, intent, 0);    
    AlarmManager alarmManager = 
     (AlarmManager)context.getSystemService(context.ALARM_SERVICE); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.SECOND, 10); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
           calendar.getTimeInMillis(), 
           40000, pendingIntent);     
} 

이 내 장치가 나는 수동으로 장치를 깨어 때까지 알람이 작동을 멈 춥니 다 절전 모드로 전환하는 경우를 제외하고 잘 작동 : 여기를 설정하고하는 나의 방법이다. 장치를 깨우면 AlarmManager가 다시 작동하기 시작합니다.

수면 모드에서도 관리자를 계속 실행하려면 어떻게해야합니까?

+0

AlarmManager.set (AlarmManager.RTC_WAKEUP, ...) 나를 위해 잘 작동, AlarmManager.setRepeating() 시도하지 않았습니다. 어쩌면이게 관련이 있을까요? 모르겠다. 그냥 – SteelBytes

+0

setRepeating이라고 말하고 싶다. 일정 시간이 지나면 작업을 반복한다. 나머지는 동일합니다 – Reyjohn

+0

누구나 해결책을 줄 수 있습니까? – Reyjohn

답변

6

PendingIntent이 서비스를 호출하는 것이므로 BroadcastReceiver이 아니라 서비스가 생성되기 전에 기기가 다시 잠자기 상태가 될 수 있기 때문입니다. 브로드 캐스트 리시버로 이동하면 onReceive가 BroadcastReceiver를 완료 할 때까지 깨어 있어야합니다. 즉, 웨이크 록을 가져와 서비스를 시작할 시간을 갖게됩니다. BroadcastReceiver으로 이동하더라도 처리가 완료 될 때까지 wakelock을 얻는 것이 좋습니다 (최대 값은 BroadcastReceiver입니다).

는 알람 관리기의 안드로이드 문서의 제 2 항에서 가져온 것입니다 :

"... 당신의 경보 수신기가 Context.startService()라고하면, 요청 된 서비스가 시작되기 전에 전화가 잘 할 가능성이있다이를 방지하기 위해. , BroadcastReceiver와 서비스는 서비스가 사용 가능해질 때까지 전화가 계속 실행되도록하기 위해 별도의 웨이크 잠금 정책을 구현해야합니다. "

관련 문제