2012-03-01 8 views
26

Sto lavorando per aggiornare MPNowPlayingInfoCenter e avere un po 'di problemi. Ho provato un bel po 'al punto in cui sono in perdita. Quanto segue è il mio codice:MPNowPlayingInfoCenter defaultCenter non aggiornerà o recupererà le informazioni

self.audioPlayer.allowsAirPlay = NO; 

    Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter"); 

    if (playingInfoCenter) { 

     NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init]; 

     MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"series_placeholder"]]; 

     [songInfo setObject:thePodcast.title forKey:MPMediaItemPropertyTitle]; 
     [songInfo setObject:thePodcast.author forKey:MPMediaItemPropertyArtist]; 
     [songInfo setObject:@"NCC" forKey:MPMediaItemPropertyAlbumTitle]; 
     [songInfo setObject:albumArt forKey:MPMediaItemPropertyArtwork]; 

     [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo]; 


    } 

Questo non funziona, ho anche provato:

[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nil]; 

Nel tentativo di farlo per rimuovere le informazioni esistenti da iPod app (o qualsiasi altra cosa potrebbe avere informazioni lì). Inoltre, solo per vedere se riuscivo a trovare il problema, ho provato il recupero delle informazioni attuali sul lancio app:

NSDictionary *info = [[MPNowPlayingInfoCenter defaultCenter] nowPlayingInfo]; 
    NSString *title = [info valueForKey:MPMediaItemPropertyTitle]; 
    NSString *author = [info valueForKey:MPMediaItemPropertyArtist]; 

    NSLog(@"Currently playing: %@ // %@", title, author); 

e ottengo Currently playing: (null) // (null)

Ho ricercato questo un bel po 'e i seguenti articoli lo spiegano abbastanza bene, tuttavia, non riesco ancora a farlo funzionare correttamente. Mi sto perdendo qualcosa? Ci sarebbe qualcosa che interferisce con questo? Si tratta di un servizio che la mia app deve registrare per poter accedere (non è stato visualizzato in nessun documento)?

Apple's Docs

Change lock screen background audio controls

Now playing info ignored

+1

è un supporto di gioco quando questo codice viene eseguito? – Ravin

+0

Ho provato con la riproduzione audio (tramite MPMoviePlayer) e senza gli stessi risultati –

+0

stampa [MPNowPlayingInfoCenter defaultCenter] utilizzando nslog. Nella documentazione dicono: Il centro informazioni predefinito ora in riproduzione contiene informazioni in riproduzione per l'app che è designata come ricevitore per eventi di controllo remoto. Stai riproducendo contenuti multimediali su qualche dispositivo remoto? assicurarsi che il supporto sia riprodotto su qualche dispositivo remoto. Perché docs dice: Gli eventi di controllo remoto consentono agli utenti di controllare l'applicazione multimediale tramite i controlli di trasporto del sistema o tramite un accessorio esterno. – Ravin

risposta

52

ho finalmente capito il problema, non stavo spingendo la mia app per ricevere gli eventi di controllo remoto, semplicemente aggiungendo questa linea ha risolto il problema:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
+0

Bel lavoro svolto. – tounaobun

+0

Affronto un problema simile. Anche se implemento tutti i metodi di cui sopra, non ricevo eventi di controllo. http://stackoverflow.com/questions/43973602/unable-to-receive-remotecontrolreceivedwithevent-objective-c-ios –

2

Io uso il codice qui sotto e funziona sempre. Sto anche usando MPMoviePlayer come te. Hai controllato serestituisce effettivamente lo YES? Hai impostato l'app per riprodurre l'audio nella chiave di background del tuo plist?

- (void) loadMPInformation 
{ 
    NSDictionary *mpInfo; 

    if([savedTrack.belongingAlbum.hasAlbumArt boolValue] == NO){ 
     mpInfo = [NSDictionary dictionaryWithObjectsAndKeys:savedTrack.belongingAlbum.album, MPMediaItemPropertyAlbumTitle, 
        savedTrack.belongingArtist.artist, MPMediaItemPropertyArtist, savedTrack.name, MPMediaItemPropertyTitle, nil]; 
    } else { 
     UIImage *artImage = [UIImage imageWithData:savedTrack.belongingAlbum.art]; 
     MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc] initWithImage:artImage]; 
     mpInfo = [NSDictionary dictionaryWithObjectsAndKeys:savedTrack.belongingAlbum.album, MPMediaItemPropertyAlbumTitle, 
        savedTrack.belongingArtist.artist, MPMediaItemPropertyArtist, savedTrack.name, MPMediaItemPropertyTitle, artwork, MPMediaItemPropertyArtwork, nil]; 
    } 
    [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = mpInfo; 

} 
+0

Sì, ho controllato che restituisca SÌ, ho anche impostato che l'app riproduca l'audio nel plist ... –

+3

Wait. Hai provato questo su un dispositivo o sul simulatore? Perché non funziona mai nel simulatore che ho notato. – deleterOfWorlds

+0

L'ho provato solo sul dispositivo ... devi registrarti per ricevere la notifica dal pulsante play/pause? –

Problemi correlati