2014-04-10 3 views
2

API 19에서 몇 가지 기사를 읽으면 모든 반복 알람이 정확하지 않습니다. Android 4.4를 실행하는 모든 기기가 정확한 반복을 실행할 수 없다는 뜻입니까? 아니면 단순히 내 프로젝트에서 android : targetSdkVersion = "18"을 사용하여 이러한 장치에서이를 피할 수 있습니까?정확하지 않은 AlarmManager.setRepeating 문제

API 19의 기능은 필요하지 않지만 어쨌든 setExact를 사용하고 알람이 호출 될 때마다 시간을 업데이트하는 것이 더 좋은 방법일까요? 내 앱에서 사용자는 매일 알림을받을 시간을 설정해야합니다.

답변

4

Android 4.4를 실행하는 모든 기기가 정확한 반복을 실행할 수 없다는 뜻입니까?

그것은 당신의 android:targetSdkVersion가 19 이상인 경우 set()setRepeating() 같은 방법은 기본적으로 부정확 한 것을 의미한다. 정확한 알람에 사용할 수있는 setExact()이 있으며 이전 setExact() 호출에 의해 트리거 된 작업을 처리하는 과정에서 setExact()을 다시 호출하여 반복되는 부분을 직접 구현할 수 있습니다.

또는 내 프로젝트에서 android : targetSdkVersion = "18"을 사용하면 이러한 장치에서이를 피할 수 있습니까?

네, 이것을 피할 수 있습니다. 결국, 무언가가 당신의 핸드를 당신의 android:targetSdkVersion을 19 이상으로 올리도록 강요 할 것입니다. 즉, 결국 위의 설명처럼 앱을 부정확 한 행동에 적용하거나 setExact()을 사용해야합니다.

알람을 호출 할 때마다 setExact를 사용하고 시간을 업데이트하는 것이 더 좋은 방법입니까?

API 레벨 19 이전에는 setExact()이 존재하지 않으므로 더 새로운 기기에서만 사용할 수 있습니다. android:targetSdkVersion을 19 이상으로 설정 한 후에는 더 새로운 장치에서 setExact()을 사용하고 이전 장치에서는 여전히 set() 또는 setRepeating()을 사용해야합니다. 나는 여전히 android:targetSdkVersion19 이하를 가지고있는 동안 setExact()을 사용하는 것에 대한 어떤 이점도 인식하지 못했습니다.

+0

이 답변을 주셔서 감사합니다. 그래서 대상을 18로 설정합니다. – KCD

+0

@CommonsWare는 다음 setExact를 호출하기 전에 onReceive 콜백에서 이전 setexact를 취소해야합니까? Onreceive는 몇 번 두 번 호출됩니다. – NitZRobotKoder

+2

@NitZRobotKoder :'setExact()'는 반복하지 않습니다. 이것은 단일 샷 이벤트입니다. 갱신 된 시간으로 바꾸는 것과 같이 더 이상 원하지 않는다면'cancel()'만하면됩니다. ** ** adb shell dumpsys alarm **을 사용하여 예약 된 이벤트를보고 실수로 두 가지 이유로 일정을 계획하고 있는지 판단하십시오. – CommonsWare

관련 문제