2012-04-10 11 views
9

Desidero ricevere automaticamente la coda attualmente riprodotta nell'app nativa per la musica. Posso usare MPMusicPlayerController per ottenere l'elemento attualmente in riproduzione, ma voglio ottenere non solo l'elemento ma l'intera coda di riproduzione. È possibile farlo utilizzando AVFoundation o qualsiasi altra libreria?iOS - coda automatica degli elementi attualmente in riproduzione

Grazie

+1

Sono sicuro che questo è possibile. 'Ecoute' nell'App Store recupera in qualche modo in modo programmato la coda corrente e questo non ha nulla a che fare con la gestione della coda dall'interno dell'app. Ad es. chiudere completamente l'app, accedere all'app Music e creare una playlist con poche tracce e riprodurla. Quindi torna nell'app sulla schermata di riproduzione in corso e tocca l'icona dell'orologio in alto a destra per vedere la coda. Vedrai che tutte le tracce in quella playlist sono lì in coda. Come faceva a sapere quale playlist? Stanno usando API non documentate? – sooper

+0

@sooper Penso che stiano usando API non documentate. Vedi la mia risposta qui sotto. – bugloaf

risposta

2

Ho paura che questo non sia possibile. Apple non ci dà accesso a queste informazioni da nessuna libreria.

-2

Ho esaminato questo e improvvisamente ho realizzato quanto sia semplice!

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection 

mediaItemCollection è la playlist corrente!

spero che questo aiuti.

+0

Non è corretto. mediaItemCollection è un MPMediaItemCollection generato dalla selezione in MPMediaPickerController. Questa è una nuova lista di brani generati sul momento e non ha nulla a che fare con i brani attualmente in riproduzione nell'app iPod. –

+0

@ 0x7fffffff volevo solo chiederti se hai qualche idea sul mio commento pubblicato sull'OP? – sooper

6

Sono abbastanza sicuro che ciò non è possibile tramite alcuna API pubblica. L'app Ecoute che @sooper menziona deve utilizzare le API private. Ho fatto un piccolo esperimento nel codice base della mia app musicale. In primo luogo ho usato questo codice per elencare tutti i metodi del lettore musicale iPod (mettere #import <objc/runtime.h> in alto):

int i=0; 
unsigned int mc = 0; 
Method * mlist = class_copyMethodList([MPMusicPlayerController iPodMusicPlayer].class, &mc); 
NSLog(@"%d methods for class", mc); 
for(i=0;i<mc;i++) { 
    NSLog(@"\tMethod no #%d: %s", i, sel_getName(method_getName(mlist[i]))); 
} 
free(mlist); 

Questa alzato alcuni nomi dei metodi intriganti come numberOfItems e nowPlayingItemAtIndex:. Così ho aggiunto questa categoria nella parte superiore del file:

@interface MPMusicPlayerController (Private) 

- (NSInteger)numberOfItems; 
- (MPMediaItem*)nowPlayingItemAtIndex:(NSInteger)index; 

@end 

e ho corso questo codice:

NSInteger numberOfItems = [[MPMusicPlayerController iPodMusicPlayer] numberOfItems]; 
for (NSInteger i = 0; i < numberOfItems; i++) { 
    MPMediaItem* mi = [[MPMusicPlayerController iPodMusicPlayer] nowPlayingItemAtIndex:i]; 
    NSLog(@"%@", [mi valueForProperty:MPMediaItemPropertyTitle]); 
} 

e abbastanza sicuro, è stampato l'elenco di riproduzione che avevo in coda in applicazione Musica !

Ovviamente, se chiami questi metodi in questo modo, Apple rifiuterà la tua app, ma c'è un modo per hide private API calls from Apple.

+0

Grazie per la risposta, sembra che la funzionalità sia stata rimossa dall'app in questione dall'ultima volta che ho commentato. – sooper