문제

응용 프로그램에 wakelock을 사용하여 앱이 보일 때 휴대 전화가 잠들지 않도록합니다.

오리엔테이션 변경이 있고 시스템이 조경 모드에서 앱을 파괴하고 재현 할 때 문제가 발생합니다. Wakelock 타이머가 백그라운드에서 만료 된 경우 시스템은 화면을 끄는 기회로 Wakelock의 릴리스를 취합니다.

편집 : Wakelock Onresume을 설정하고 OnPause를 출시하고 있다고 언급해야합니다. 이해할 수 있듯이 앱이 Wakelock이 유출되는 것을 방지하기 위해 해제해야합니다.

오리엔테이션 변경을 계속하려면 Wakelock이 필요합니다.

아래는 이것에 대한 해결책을 설명했습니다. 이것이 처리하는 선호하는 방법이며 대안이 있습니까?


활동이 아닌 wakelock을 보유하고 활동이 풀릴 때 서비스가 카운트 다운 타이머를 시작하여 (10 초 동안) 활동이 반창하지 않으면 타이머가 만료되면 wakelock을 해제합니다. 간단한 방향이 변경되면 10 초 안에 활동이 반동되고 Wakelock을 유지하지 않으면 Wakelock이 출시됩니다.

감사.

도움이 되었습니까?

해결책

대신 a WakeLock, 노력하다 getWindow().setFlags() 사용 WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 깃발.

Wakelock 타이머가 백그라운드에서 만료 된 경우 시스템은 화면을 끄는 기회로 Wakelock의 릴리스를 취합니다.

그것은 안됩니다. 정의상, 사용자는 장치와 상호 작용 했으므로 다른 것과 무관하게 화면이 계속 유지되어야합니다.

다른 팁

내가 한 방법은 다음과 같습니다 ...

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "DoNotDimScreen");

그 다음에 ...

wl.acquire();

... 실제로 웨이크 잠금 장치를 활성화해야 할 때.

'PowerManager.on_After_Release'플래그는 사용자 활동 타이머를 찌르기 때문에이 웨이크 잠금 장치가 출시 될 때 화면이 조금 더 오래 지속되므로 방향 변경으로 활동이 파괴 될 때 발생합니다.

나를 위해 잘 작동합니다!

나는 실제로 Wakelock을 공개하지 않음으로써 그것을했다. 대신 타임 아웃으로 획득합니다.

private PowerManager.WakeLock wl;

protected void onStart(Bundle savedInstanceState) {
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Words counter");
    // disable reference counting, as acquire/release calls are not paired
    wl.setReferenceCounted(false);
    wl.acquire();
}

protected void onStop() {
    // acquire for few seconds to keep lock until onStart is called with new orietnation
    wl.acquire(3000);
}

다른 방법에 비해 장점 :

  • 사용 가능 SCREEN_DIM_WAKE_LOCK
  • 간단합니다 (isfinishing () 등으로 플레이 할 필요가 없습니다)
  • 오리엔테이션 변경 후 사용자 활동을 찌르지 않습니다. 즉, 희미한 디스플레이는 희미하게 유지됩니다
  • 릴리스 (예 : 시간이 끝나지 만 사용자는 활동에 남아 있음)가 즉시 릴리스됩니다. 기본 시간 초과를 기다릴 필요가 없습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top