Quiero tomar fotos de la cámara del dispositivo Android periódicamente en cuestión de horas, para crear un efecto de video de lapso de tiempo.Android - ¿Cómo puedo despertar el teléfono de un sueño difícil para tomar una foto?
Configuré un Alarm Manager con un indicador AlarmManager.RTC_WAKEUP configurado para iniciar un servicio cada pocos minutos.
El servicio tiene un wakelock parcial, hace algo de trabajo, y luego llama a un receptor de difusión a través del Administrador de alarmas que inicia una actividad.
La actividad se crea (o se reanuda), activa su propio wakelock y configura la superficie de vista previa de la cámara. Una vez que la superficie está configurada, se llama al método surfaceChanged() del oyente SurfaceHolder, que finalmente toma una imagen.
Si el dispositivo está en funcionamiento, todo funciona perfectamente como se esperaba. Pero si el dispositivo está dormido, una vez que el método Activity onResume() finalice, la Actividad se pausará instantáneamente. La superficie de vista previa de la cámara nunca termina de inicializarse y no se tomará ninguna fotografía.
Así que las preguntas que tengo son:
¿Hay alguna manera de activar el teléfono mediante programación? aunque lo intento usando:
PowerManager powerManager = (PowerManager)this.getSystemService(Context.POWER_SERVICE); powerManager.userActivity(SystemClock.currentThreadTimeMillis(),false);
Pero eso no levanto el teléfono si está dormido.
¿Hay alguna manera de tomar una fotografía sin usar una vista previa de la superficie?
¿Hay alguna manera de tomar una fotografía que no dependa de devoluciones de llamada asincrónicas? ¿Puedo poner todo el código en el método Activities onResume() para tomar una foto?
¿Hay alguna forma de mantener el método Activity onResume() funcionando lo suficiente para que la vista previa de la cámara tenga tiempo suficiente para inicializar y llamar a todos los oyentes?
estoy usando los wakelocks correctamente, y tengo todos los permisos está configurado correctamente en el archivo de manifiesto. Mi actividad no se mantiene despierta el tiempo suficiente para que los oyentes asincrónicos funcionen correctamente.
Y para complicar el problema, intento mantener todo Android 1.6 compatible, porque es el único dispositivo de prueba al que tengo acceso.
¡Esto es algo frustrante!
¿Alguna razón por la que no está haciendo todo esto en su servicio? –
Ha pasado un tiempo desde esta pregunta, así que no estoy 100% seguro. No creo que los servicios se ejecuten cuando el teléfono está en un sueño difícil, por lo que tuve que usar el Administrador de alarmas para activar primero el teléfono. –
Si logras ejecutar el servicio (hay una forma) - ¿es necesario hacer todo lo que haces en la Actividad _en la Actividad_? Porque si no, creo que recibí la respuesta –