Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

221
Vistas
Cómo saber cuándo MPMusicPlayerController cambia el elemento de reproducción de forma natural

Estoy usando MPMusicPlayerController para crear un reproductor de música en mi aplicación. Tengo todo funcionando muy bien, excepto por un pequeño problema:

Cuando las canciones cambian naturalmente (una canción termina y la siguiente comienza desde la cola establecida), la notificación MPMusicPlayerControllerNowPlayingItemDidChange no parece ser llamada.

En este momento estoy utilizando las notificaciones MPMusicPlayerControllerNowPlayingItemDidChange y MPMusicPlayerControllerPlaybackStateDidChange . Estos cubren reproducción, pausa, reproducción aleatoria, repetición, siguiente, anterior, etc. Cuando se presionan las notificaciones, actualizo la pantalla según MPMusicPlayerController para mostrar la nueva canción, el artista o los diferentes íconos de botón requeridos. Sin embargo, ninguno de estos se llama cuando termina una canción y la siguiente comienza a reproducirse automáticamente; esto significa que el título y el artista de la canción anterior se dejan hasta que el usuario vuelve a cargar la pantalla o interactúa con los controles de audio, lo que no es una buena experiencia para el usuario.

Aparte de verificar regularmente si el nombre actual coincide con el nombre de juego, no sé cómo actualizar esto en el flujo normal de la aplicación.

 NotificationCenter.default.addObserver( forName: NSNotification.Name.MPMusicPlayerControllerNowPlayingItemDidChange, object: musicPlayerController, queue: nil) { _ in // Update view }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La respuesta a esto resulta ser muy simple pero también difícil de detectar si no estás buscando en el lugar correcto.

Antes de agregar a nuestros observadores, debemos comenzar a generar las notificaciones de reproducción:

 musicPlayerController.beginGeneratingPlaybackNotifications() NotificationCenter.default.addObserver(self, selector: #selector(refreshView), name: .MPMusicPlayerControllerPlaybackStateDidChange, object: musicPlayerController) NotificationCenter.default.addObserver(self, selector: #selector(refreshView), name: .MPMusicPlayerControllerNowPlayingItemDidChange, object: musicPlayerController)

También debemos recordar dejar de generarlos cuando dejemos (desasignar) la vista:

 deinit { NotificationCenter.default.removeObserver(self, name: .MPMusicPlayerControllerPlaybackStateDidChange, object: nil) NotificationCenter.default.removeObserver(self, name: .MPMusicPlayerControllerNowPlayingItemDidChange, object: nil) musicPlayerController.endGeneratingPlaybackNotifications() }

La confusión provino de que musicMediaPlayer devolvió una serie de notificaciones, incluso sin esto, lo que no apuntaba al hecho de que no estábamos observando todas las notificaciones que se estaban disparando.

Nota: vale la pena señalar que, en el momento de escribir esto, se estaba discutiendo si era necesario eliminar manualmente a los observadores; lo he incluido aquí para completar la respuesta.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda