Domanda

Sto usando Wakelock nella mia applicazione per evitare che il telefono dormendo quando l'applicazione è visibile.

Il problema arriva quando c'è un cambiamento di orientamento e il sistema distrugge e ricrea l'applicazione in modalità orizzontale. Se il timer Wakelock è scaduto in background il sistema prende il rilascio di Wakelock come un'opportunità per spegnere lo schermo.

Modifica:. Devo dire che sto installando Wakelock onResume, e rilasciando onPause - a quanto mi risulta, è necessario rilasciare quindi per evitare che l'applicazione fuoriuscita del Wakelock

Ho bisogno Wakelock di continuare attraverso il cambiamento di orientamento.

Qui di seguito ho delineato una soluzione a questo. E 'questo il modo migliore per gestire la cosa, e non ci sono alternative?


Creare un servizio che detiene Wakelock (piuttosto che l'attività) e quando l'attività non associa il servizio inizia un conto alla rovescia (per dire 10 secondi) in cui si rilascerà Wakelock quando il timer scade se l'attività non Bind. Se fosse una semplice modifica dell'orientamento dell'attività si rebind entro quei 10 secondi e quindi mantenere Wakelock, in caso contrario, sarà rilasciato Wakelock.

Grazie.

È stato utile?

Soluzione

Al posto di un WakeLock, provare getWindow().setFlags() utilizzando il flag WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON.

  

Se il timer Wakelock è scaduto in   sullo sfondo il sistema prende il   rilascio di Wakelock come un'opportunità   per spegnere lo schermo.

Non dovrebbe. Per definizione, l'utente ha interagito con il dispositivo, quindi lo schermo dovrebbe rimanere su per questo motivo, indipendentemente da qualsiasi altra cosa.

Altri suggerimenti

Ecco come ho fatto ...

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

Seguito da ...

wl.acquire();

... quando è necessario attivare in realtà il blocco scia.

La bandiera 'PowerManager.ON_AFTER_RELEASE' colpisce il timer attività degli utenti in modo che il video resta acceso per un po 'di più quando questo blocco scia viene rilasciato, che sarà il caso in cui la vostra attività è distrutto in un cambiamento di orientamento.

funziona bene per me!

L'ho fatto da realtà mai rilasciando il Wakelock. Invece, acquisisco con timeout.

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);
}

I vantaggi rispetto ad altri metodi:

  • Utilizzabile con il SCREEN_DIM_WAKE_LOCK
  • semplice (non c'è bisogno di giocare con isFinishing (), ecc.)
  • Non colpire l'attività degli utenti dopo il cambio di orientamento. Cioè Display soffusa rimane oscurato
  • Se si rilascia (ad esempio il tempo è finito, ma l'utente è rimasto in attività), è rilasciato immediatamente. Non c'è bisogno di aspettare per timeout predefinito.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top