Tengo una aplicación de reproductor multimedia que reproduce música con MPMoviePlayerController. Necesito actualizar la UI según la posición de reproducción. Lo mejor que puedo decir es que no hay forma de recibir activamente esta información del jugador con una devolución de llamada o algo así, y básicamente necesito sondearlo yo mismo.¿Cómo monitorear el progreso de reproducción de MPMoviePlayerController sin matar una batería?
Así que pensé en usar un temporizador simple, ejecutar cada segundo, para eso. El código es tal:
En alguna parte del código de configuración:
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updatePlaybackProgressFromTimer:) userInfo:nil repeats:YES];
Y luego:
- (void) updatePlaybackProgressFromTimer:(NSTimer *)timer {
if (([UIApplication sharedApplication].applicationState == UIApplicationStateActive) && (player.playbackState == MPMoviePlaybackStatePlaying)) {
CGFloat progress = player.currentPlaybackTime/player.duration;
// do something useful with this info
}
}
El temporizador se ejecuta cada segundo, incluso cuando la aplicación está en el fondo. El método primero ve si la aplicación está activa y el reproductor está jugando, y luego realiza alguna actualización de UI.
¿Hay alguna implicancia en la duración de la batería para ejecutar un temporizador cada segundo de esta manera? ¿Debo ser más diligente y tratar de demoler el temporizador al ingresar al fondo y reactivarlo al activar la aplicación? Estoy seguro de que hay un cierto efecto de duración de la batería, pero de manera realista, ¿qué tan serio es? ¿O hay otras formas recomendadas de hacer este tipo de cosas?
sólo tiene que utilizar un temporizador según lo sugerido por @ChrisGummer. No hay KVO para el marco MPMoviePlayerController o devoluciones de llamada similares. Sin embargo, AVFoundation (AVPlayer) ya lo tiene; no obstante, no es necesario abstenerse de un temporizador por las razones dadas. – Till