2009-05-22 5 views
5

이 질문은이 포럼에서 여러 다른 사람들의 본질처럼 보입니다. 나는 액티브 아이폰 애플리케이션이 계속해서 실행될 수 있다고 믿는다. 특히, 타이머가 콜백을받는 것을 계속할 수있다. 비활성 상태에 들어간 후에 (화면 잠금 상태에서 유휴 타이머가 시작되거나 사용자가 누를 때까지) 하드웨어 잠금 버튼).iPhone 응용 프로그램이 비활성 상태 인 동안 NSTimer 콜백

설명서에 따르면 응용 프로그램이 비활성 상태이지만 실행 중이지만 들어오는 이벤트는 전달되지 않는다고 말합니다. (NDA에 관해서 급상승하고 있기 때문에 링크를 제공하지 않습니다. 위반? 한숨).

또한 "Ambr Str"이라는 사용자의 두 답변은 타이머 콜백을 계속받을 수 있다고 직접적으로 언급하고 있으며이를 달성하기 위해 코드 스 니프를 제공합니다 (이 때문에 연결할 수 없습니다. 새로운 사용자, 죄송합니다 - "iPhone이 대기 모드로 들어갈 때 iPhone 응용 프로그램에는 어떻게됩니까?"라는 질문을 검색하여 답변을 찾습니다.)

내가 제안한 콜백을 만들려고했지만 응용 프로그램이 비활성화되면 콜백이 중지됩니다.

iPhone이 연결되어있는 동안 응용 프로그램이 비활성 상태가되면 (유휴 시간 초과 또는 절전 버튼으로 인해) 콜백이 계속 발생하는 것으로 나타났습니다. 아마도 사용자를 확보해야합니다. 배터리 팩을 가지고 다닐 때 ;-)

답변

2

애플 포럼에서이 질문에 대한 좋은 대답이 있습니다. "타이머"와 "에스키모"(답변을 제공하는 도움이되는 갈라진 금)를 검색하십시오.

간단히 말해서 응용 프로그램이 비활성화 된 직후 전화는 실제로 잠자기 상태가됩니다. 이것을 방지하는 유일한 방법은 일부 오디오를 재생하는 것입니다 (또는 배경 응용 프로그램에서 일부 오디오를 재생하는 것). 오디오가 재생되는 동안 전화기가 잠자기 상태가 아니며 응용 프로그램이 계속 실행됩니다.

깨어있는 상태로 음악을 재생하는 것은 해킹이며 가능하면 해지하지 않는 것이 좋습니다. 내 응용 프로그램 (침묵 기간에 산재한 오디오 재생을 수행하는)에서 생각해 보면, 이상적이지는 않지만 접근법은 유효합니다!

+1

UIApplication.idleTimerDisabled가 전혀 도움이 되나요? 아니면 수동으로 절전 버튼을 누르시면 작동하지 않습니까? –

+1

당신이 제안한대로 UIApplication.idleTimerDisabled는 사용자가 절전 버튼을 눌렀을 때 작동하지 않습니다. 그러나 그 이상이 있습니다 ... UIApplication.idleTimerDisabled는 응용 프로그램이 비활성 상태로 들어가는 것을 중지하려는 경우에 유용합니다 장치는 상호 작용하지 않습니다. 그것은 게임에 적합합니다. 필자는 가능한 경우 응용 프로그램을 비활성 상태로 만들고 싶습니다 (가능한 경우 장치 전원을 예약하려고합니다). 또한 사용자가 장치를 잠그면 입력을받지 못하게 할 수 있습니다. –

+0

iOS 5와 호환되는 구현은 https://github.com/mruegenberg/MMPDeepSleepPreventer입니다. – mrueg

0

앱이 있습니다. 웹 서버가 내장되어 있습니다. 서버가 켜져 있고 장치의 전원이 켜져있는 상태에서 자동 수면 IFF를 비활성화하는 옵션을 제공 할 계획입니다. UIDevice의 batteryState 속성을 확인하는 것이 좋습니다. 따라서 batteryState! = UIDeviceBatteryStateUnplugged 인 경우 계속 진행하여 유휴 타이머를 비활성화하십시오. (참고 : 시뮬레이터에서 UIDeviceBatteryStateUnknown이 반환된다고 말하면됩니다.)

또한 UIDeviceBatteryStateUnplugged 알림을 수신하고 batteryMonitoringEnabled를 적절하게 설정하려고합니다.

관련 문제