2012-04-10 33 views
9

oynayan öğelerin sıraya olsun. Ben öğeyi oynarken şu anda almak için MPMusicPlayerController kullanabilirsiniz ama öğeyi ama bütün Çalma kuyruğunu sadece almak istiyorum. AVFoundation veya başka bir kütüphaneyi kullanarak yapmak mümkün mü?iOS - programlama yoluyla şu anda programlama anda yerli Müzik App oynanan Sıraya almak isteyen

Teşekkür ederiz

+1

Ben bu mümkün olduğundan emin değilim. App Store'daki 'Ecoute', bir şekilde programlı bir şekilde mevcut kuyruğu almayı gerektirir ve bunun, uygulamanın içinden kuyruğu yönetmeyle alakası yoktur. Örneğin Uygulamadan tamamen çıkın, Müzik uygulamasına gidin ve birkaç parça içeren bir oynatma listesi oluşturun ve oynayın. Ardından sıradaki oynatma ekranına uygulamaya geri dönün ve sırayı görmek için sağ üstteki saat simgesine dokunun. Bu oynatma listesindeki tüm parçaların sırada olduğunu göreceksiniz. Hangi şarkı listesini biliyordu? Belgelenmemiş API'ler kullanıyorlar mı? – sooper

+0

@sooper Belgelendirilmemiş API'leri kullandıklarını düşünüyorum. Cevabımı aşağıya bakın. – bugloaf

cevap

2

Korkarım ki bu mümkün değil. Apple, bu bilgilere herhangi bir kütüphaneden erişemez.

-2

Bu bakarak ve aniden ne kadar basit fark ettik!

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

mediaItemCollection geçerli oynatma listesi!

Bunun yardımcı olacağını umuyorum.

+0

Bu yanlış. mediaItemCollection, MPMediaPickerController'daki seçim tarafından oluşturulan bir MPMediaItemCollection'dır. Bu, yerinde oluşturulan şarkıların yeni bir listesi ve şu anda iPod uygulamasında çalmakta olan parçalarla ilgisi yok. –

+0

@ 0x7fffffff, OP'ye gönderilen yorumum hakkında herhangi bir fikrin olup olmadığını sormak istedi? – sooper

6

Bu açık hiçbir API aracılığıyla mümkün değildir eminim. @sooper'dan bahsettiğimiz Ecoute uygulaması, özel API'leri kullanmalıdır. Kendi müzik uygulamamın kod tabanında küçük bir deney yaptım. Önce iPod müzik çalar (üstündeki #import <objc/runtime.h> koymak) 'de tüm yöntemleri listelemek için bu kodu kullandı:

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); 

Bu numberOfItems ve nowPlayingItemAtIndex: gibi bazı ilginç yöntem adlarını ele geçirildi. Bu yüzden dosyanın üstündeki bu kategori eklendi:

@interface MPMusicPlayerController (Private) 

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

@end 

ve ben bu kodu koştum:

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

ve tabii ki, ben Müzik uygulamasında sıraya etmişti çalma listesi çıktısı ! Tabii

, bu şekilde bu yöntemleri çağırırsanız, Apple uygulamanızı reddeder, fakat bir yol hide private API calls from Apple için var.

+0

Yanıt için teşekkürler, son yorumdan bu yana söz konusu uygulamanın işlevselliği kaldırılmış gibi görünüyor. – sooper