2013-01-16 5 views
1

내가 onCreate 방법처럼 웨이크 잠금을 얻을 발표하고 그것을 잘 작동되지 않습니다안드로이드 웨이크 잠금 (나는 또한 권한을 설정)

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Wake lock"); 
wl.acquire(); 

을하지만, 내가 해제하려고 할 때 그것을 좋아 :

@Override 
protected void onDestroy() 
{ 
    super.onDestroy(); 
    wl.release(); 
} 

일부 이유로 출시되지 않았습니다. 이것이 어떻게 가능한지 ? 어떤 아이디어?

EDIT : 나는 finish()를 호출하는 exit 버튼을 가지고 있으며,이 버튼은 onDestroy()를 호출합니다. 종료 버튼을 누른 다음 전화를 잠자기 상태로 만들면 프로그램이 작동하지 않을 것으로 예상되지만 잠금 장치가 해제되었음을 알리는 동작을합니다.

+0

"어떤 이유로 든 출시되지 않았습니다."- 어떻게 결정 했습니까? – CommonsWare

+0

잠자기 버튼을 눌러서 휴대 전화를 켤 때에도 내 앱이 계속 작동합니다. – Cemre

+0

"잠자기 상태로 설정할 때"onDestroy()가 호출된다고 생각하게 만드는 이유는 무엇입니까? – CommonsWare

답변

4

WakeLock - 릴리스 코드의 작동 여부를 확인하는 올바른 방법은 WakeLock이 출시되기 전에 출시 전후에 adb shell dumpsys power을 사용하는 것입니다. 다른 앱은 원할 때 언제든지 WakeLocks을 요청하고 획득 할 수 있으므로 다른 캐주얼 수표 (예 : 화면이 꺼져있을 때 내 앱이 실행됩니까?)는 신뢰할 수 없습니다.

1

onPause() 코드를 활동의 onPause()으로 변경하십시오. Android 설명서에 따라 Activity의 onResume()에서 acquire()를 호출하고 Activity의 onPause()에서 wakelock을 릴리스하는 것으로 설명합니다. 당신의 경우에 당신은 활동 잠을 만들지 만 그것을 파괴하지 않으므로 그것은 물결을 풀어주지 않을 것입니다. 따라서 onPause()으로 이동하십시오.

+0

나는 onDestroy()를 호출하는 finish()를 호출하는 exit 버튼이 있습니다. 종료 버튼을 누른 다음 전화를 잠자기 상태로 만들면 프로그램이 작동하지 않을 것으로 예상됩니다. 그래서 프로그램이 실행되는 동안 절전 버튼을 누르지 않습니다. 오해의 소지가 있습니다. – Cemre

1

이것은 내 해결책입니다. isHeld() 기능을 사용하면됩니다.

if (wl!= null) { 
    if (wl.isHeld()) { 
     wl.release(); 
    } 
    wl= null; 
}