Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

219
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!