segundo plano escuchar como buscar iphone ios background screen locked

iphone - escuchar - Reproducción de un sonido mientras la aplicación está en primer plano y la pantalla está bloqueada-iOS



escuchar youtube en segundo plano iphone (2)

Prefacio: Estoy construyendo una aplicación de despertador. Muchas otras aplicaciones de alarma, como Alarm Clock Pro, pueden reproducir una alarma mientras la pantalla está bloqueada y la aplicación está en primer plano. Sus alarmas pueden reproducirse por un tiempo ilimitado y pueden aumentar progresivamente el volumen usando el volumen del sistema. Tampoco toman el control de los controles de música (si abre la pantalla multitarea y se desplaza para reproducir el audio, no verá su icono)

Estoy teniendo algunos problemas para reproducir esa funcionalidad.

Para reproducir alarmas mientras la aplicación está en primer plano, activamos notificaciones locales que funcionan muy bien. He tenido algunos éxitos limitados mientras la pantalla está bloqueada (y la aplicación está en estado Inactivo)

He usado los siguientes métodos:

  1. Ejecute un NSTimer cada segundo con una tarea en segundo plano cuando la pantalla esté bloqueada. Logré mantener la aplicación abierta más allá del máximo de 10 minutos, pero no pude reproducir un sonido. cuando llegó el momento

  2. Reproduce un sonido silencioso de 1 segundo usando AVAudioPlayer . Cuando finalice el sonido, vuelva a reproducirlo y verifique si la aplicación se encuentra en estado Inactivo (pantalla bloqueada). Si está en el estado de pantalla bloqueada y es hora de reproducir una alarma, tóquela. El problema aquí es que debo usar

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

para seguir actualizando la canción mientras está en segundo plano. Ese método mostrará Wake en los controles de música y detendrá cualquier música que se esté reproduciendo actualmente y que queremos evitar.

  1. Una combinación de # 1 y # 2. Cuando la aplicación se abre, reproduce un sonido silencioso en la repetición infinita. Cuando la pantalla está bloqueada, active un temporizador para verificar si es hora de reproducir una alarma. Cuando sea el momento de reproducir una alarma, cambie el sonido silencioso al sonido de la alarma. El sistema acabaría forzando el cierre de la aplicación.

Conocimiento relacionado que ha ayudado pero no ha resuelto mi pregunta:

  1. ¿Cómo empiezo a reproducir audio cuando estoy en modo silencioso y bloqueado en iOS 6?
  2. iOS 5 prevención del sueño profundo
  3. Reanudar la ejecución del código después de la interrupción mientras la aplicación está en segundo plano
  4. Cómo reproducir música en segundo plano iphone sdk

Resumen: Mientras la pantalla está bloqueada y la aplicación está en primer plano, no puedo evitar que el proceso se detenga después de la marca de 10 minutos.

ACTUALIZAR

Terminé usando https://github.com/mruegenberg/MMPDeepSleepPreventer que me permitió reproducir un sonido después de 10 minutos. Sin embargo, esto consume la batería como un loco. Necesito encontrar una solución más eficiente.

ACTUALIZACIÓN 2

Descargué algunas aplicaciones http://marcopeluso.com/ desde la tienda de aplicaciones. Es el creador de Deep Sleep Preventer. Descargué algunas de sus aplicaciones y realicé algunas pruebas de instrumentos y vi que su aplicación no estaba agotando la batería tanto como mi aplicación (aproximadamente el 2,5% por hora, según se afirma en algún lugar de su blog). ¡Estoy muy seguro de que necesito optimizar mi aplicación y los problemas de descarga de la batería desaparecerán y mis problemas se resolverán!

ACTUALIZACIÓN 3 Terminé usando https://github.com/mruegenberg/MMPDeepSleepPreventer

Lo ejecuté en su propio proyecto xCode separado y solo usa el 0.5% de la CPU cuando la aplicación está en segundo plano. Resulta que era mi aplicación estaba chupando la CPU. Así que todo funciona bien ahora :)


Incluso si su aplicación está en primer plano cuando el dispositivo está encendido, una vez que se haya bloqueado, pasará a segundo plano (se llamará "resreservado"). Ahora, a partir de lo que he reunido en Internet, no debería hacer un bucle con el sonido, sino proporcionar el archivo de música personalizado en uno de estos formatos en su paquete principal de aplicaciones:

  • PCM lineal
  • MA4 (IMA / ADPCM)
  • µLaw
  • una ley

El sonido personalizado solo puede ser de 30 segundos o menos. Después de inicializar el objeto UILocalNotification, debe establecer su propiedad de fecha de inicio, que es la fecha y la hora (también es recurrente) para activar la notificación . Luego, establece el mensaje de alerta a través de alertBody (como "despertar") y la cadena en el botón de alerta a través de alertAction. El nombre de archivo del sonido personalizado va en la propiedad soundName. Presenta su instancia de notificación llamando a scheduleLocalNotification :, un método de aplicación UIA. Tenga en cuenta que la hora a la que llama a este método no tiene que ser, y generalmente no lo es, la hora en que se activará la notificación. Y solo necesita llamar a esta vez incluso si establece una notificación recurrente. Usted la cancela llamando a cancelLocalNotification: . Ahora suena la alarma si su aplicación está en primer plano, en segundo plano o incluso no está abierta.

Todo está here .


Vea mi respuesta arriba. Aunque básicamente

Terminé usando https://github.com/mruegenberg/MMPDeepSleepPreventer

Lo ejecuté en su propio proyecto xCode separado y solo usa el 0.5% de la CPU cuando la aplicación está en segundo plano. Resulta que fue mi código el que estaba matando a la CPU. ¡Todo está bien ahora!