Pregunta

Hola Estoy tratando de utilizar un servicio para controlar un wakelock para que pueda salir de forma permanente en la pantalla cuando mi aplicación se está ejecutando. Creo el wakelock y activarlo en onCreate () y lo liberan en OnDestroy () sin embargo me sale el error "wl no se puede resolver". ¿Puede alguien explicar cómo puedo superar esto? Código de abajo:

public class WakeLockService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }  
    @Override
    public void onCreate() {
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
        wl.acquire();
    }
    @Override
    public void onDestroy() {
        wl.release();
    }
}
¿Fue útil?

Solución

¿No se echa en falta la línea

    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");

en OnDestroy ()? Es una variable local en onCreate (), pero no se declara en OnDestroy () en absoluto.

O, más probable, es posible que desee para que sea un campo de WakeLockService clase en lugar de una variable local.

Otros consejos

Bueno, incluso si desea utilizar una variable de instancia yo creo que esto no es la manera de hacerlo. ¿Quién es destroy() llamada va? Espero que no sea usted, es el trabajo del sistema operativo para hacerlo. Pero cuando usted está sosteniendo una estela de bloqueo es muy poco probable que su método destroy() ser llamado, debido a que el sistema operativo será primera destruir otras actividades / servicios.

Además de eso, es demasiado tarde para adquirir el bloqueo estela en el método onCreate(). Antes de llegar a onCreate() el teléfono podría haber ido a dormir ya en el momento que se activa el servicio de una alarma contra de una actividad que está en el fondo.

Es difícil decir lo que debe hacer de manera diferente, ya que no da mucho contexto. El curso normal de los acontecimientos es la siguiente. Un BroadcastReceiver se llama y en el onReceive() que adquiera el bloqueo de raíz y lo puso en una variable estática en su servicio. Cuando el servicio se realiza debe llamar stopSelf(), liberar el bloqueo de raíz y luego anular la variable estática que mantiene una referencia a la cerradura.

Además, si se utiliza un servicio es un bloqueo completo estela muy probable que no lo desea, pero un bloqueo parcial es estela. No necesita la pantalla para quedarse, ¿verdad?

Lo sentimos, pero cerraduras despertarse son muy complicados de usar, debido exactamente los problemas que he descrito anteriormente. Es definitivamente un tema avanzado y es fácil de meter la pata. Si lo hace, su aplicación va a llegar comentarios muy feos, porque sostiene por mucho tiempo es una ofensa mayor, ya que drena la batería. No tome a mal por favor, pero dada la naturaleza del problema informados aquí (/ error del compilador sintaxis) Me gustaría sugerir fuertemente a buscar una solución sin un servicio y estela de bloqueo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top