2012-04-10 21 views
9

खेलने मैं करने के प्रोग्राम के वर्तमान कतार देशी संगीत अनुप्रयोग में खेला करना चाहते हैं मदों की कतार मिलता है। मैं MPMusicPlayerController का उपयोग वर्तमान में आइटम खेल रहे हैं प्राप्त करने के लिए कर सकते हैं, लेकिन मैं न केवल आइटम लेकिन पूरे खेल पंक्ति प्राप्त करना चाहते हैं। क्या AVFoundation या किसी अन्य लाइब्रेरी का उपयोग करके इसे करना संभव है?आईओएस - प्रोग्राम के वर्तमान

धन्यवाद

+1

मुझे यकीन है कि यह संभव है हूँ। ऐप स्टोर में 'इक्उट' किसी भी तरह से प्रोग्रामिंग रूप से वर्तमान कतार को पुनर्प्राप्त कर रहा है, और इसमें ऐप के भीतर से कतार प्रबंधन के साथ कुछ लेना देना नहीं है। उदाहरण के लिए ऐप को पूरी तरह से छोड़ दें, संगीत ऐप में जाएं और कुछ ट्रैक के साथ प्लेलिस्ट बनाएं और इसे चलाएं। फिर ऐप में वापस स्क्रीन पर जाएं और कतार देखने के लिए ऊपरी दाएं भाग में आइकन आइकन टैप करें। आप देखेंगे कि उस प्लेलिस्ट में सभी ट्रैक कतार में हैं। यह कैसे पता चला कि कौन सी प्लेलिस्ट? क्या वे अनियंत्रित एपीआई का उपयोग कर रहे हैं? – sooper

+0

@sooper मुझे लगता है कि वे अनियंत्रित एपीआई का उपयोग कर रहे हैं। नीचे मेरा जवाब देखें। – bugloaf

उत्तर

2

मुझे डर है कि यह संभव नहीं है। ऐप्पल हमें किसी भी पुस्तकालय से इस जानकारी तक पहुंच नहीं देता है।

-2

मैं इस में देख रहा था और अचानक एहसास हुआ कि यह कैसे आसान है!

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

मीडियाइटेम कोलेक्शन वर्तमान प्लेलिस्ट है!

उम्मीद है कि इससे मदद मिलती है।

+0

यह गलत है। MediaItemCollection MPMediaItemCollection MPMediaPickerController में चयन द्वारा उत्पन्न किया गया है। यह स्पॉट पर उत्पन्न गीतों की एक नई सूची है और वर्तमान में आईपॉड ऐप में चल रहे ट्रैक के साथ कुछ लेना देना नहीं है। –

+0

@ 0x7fffffff सिर्फ यह पूछना चाहता था कि ओपी को पोस्ट की गई मेरी टिप्पणी पर आपके कोई विचार हैं या नहीं? – sooper

6

मैं बहुत यकीन है कि यह किसी भी सार्वजनिक एपीआई के माध्यम से संभव नहीं है हूँ। Ecoute ऐप कि @sooper उल्लेख निजी एपीआई का उपयोग करना चाहिए। मैंने अपने स्वयं के संगीत ऐप के कोडबेस में थोड़ा प्रयोग किया। सबसे पहले मैं आइपॉड संगीत खिलाड़ी (शीर्ष पर #import <objc/runtime.h> डाल) में सभी तरीकों को सूचीबद्ध करने के लिए इस कोड का प्रयोग किया:

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

यह numberOfItems और nowPlayingItemAtIndex: जैसे कुछ पेचीदा विधि के नाम कर दिया। इसलिए मैं फ़ाइल के शीर्ष पर इस श्रेणी कहा:

@interface MPMusicPlayerController (Private) 

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

@end 

और मैं इस कोड भाग गया:

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

और यकीन है कि पर्याप्त है, यह प्लेलिस्ट कि मैं संगीत एप्लिकेशन में पंक्तिबद्ध था मुद्रित !

बेशक

, अगर आप इन तरीकों इस तरह से फोन, एप्पल अपने अनुप्रयोग को अस्वीकार कर देंगे, लेकिन वहाँ hide private API calls from Apple के लिए एक रास्ता है।

+0

उत्तर के लिए धन्यवाद, ऐसा लगता है कि आखिरी बार टिप्पणी के बाद से कार्यक्षमता को ऐप से हटा दिया गया है। – sooper