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.
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
@sooper Penso che stiano usando API non documentate. Vedi la mia risposta qui sotto. – bugloaf