2010-07-01 9 views
18

पृष्ठभूमि में ऑडियो बजाने के बारे में बात करते समय दस्तावेज खराब तरीके से लिखा जाता है। यह इंप्रेशन देता है कि जो ऑडियो आप वर्तमान में खेल रहे हैं उसे चलाने के लिए आपको केवल info.plist फ़ाइल और वॉलह में एक कुंजी/मूल्य जोड़ी जोड़ना है, यह जादू है।ऑडियो चलाने के लिए आईओएस 4 पर पृष्ठभूमि दर्ज करना

हालांकि, यह मामला नहीं है। उदाहरण के लिए, यदि मैं एक एमपी 3 चलाता हूं जो 2 मिनट लंबा होता है, तो स्पष्ट रूप से ऑडियो मेरे ब्राउज़र को पृष्ठभूमि में भेजने के लिए होम बटन दबाए जाने के बाद खेलने में सक्षम होता है। बात यह है कि, हालांकि मेरे पास info.plist फ़ाइल में वह कुंजी/मूल्य जोड़ी है, फिर भी यह ऑडियो को रोक देता है और फिर ऐप पर वापस जाने के बाद खेलना शुरू कर देता है।

ऐप्पल का कहना है कि ऑडियो समर्थन पृष्ठभूमि और ध्वनि के लिए सभी ढांचे को तब तक खेलना जारी रखना चाहिए जब तक यह समाप्त नहीं होता है और फिर ऐप्पल आपके ऐप को निलंबित कर देगा।

तो, मेरा सवाल है: वे क्या कर रहे हैं जो मुझे याद आ रही है? क्या मुझे किसी भी तरह अपने नए प्रतिनिधियों का उपयोग करना होगा या applicationDidEnterBackground पर ऑडियो कॉल करना होगा? मेरे लिए, यह समझ में नहीं आता है क्योंकि मैं राज्य को नहीं बचा रहा हूं (वे मेरे लिए तेजी से ऐप स्विचिंग के साथ करते हैं) या वास्तव में ऑडियो के अलावा पृष्ठभूमि में कुछ भी संभालने के लिए जो वे कहते हैं, स्वचालित रूप से संभाला जाना चाहिए।

+0

lol @ "wallah"। voila :) – h4xxr

+0

क्षमा करें, मैंने दान Quayle से वर्तनी सबक लिया :) – iwasrobbed

उत्तर

17

प्रलेखन से अनुपलब्ध एक हिस्सा है कि आपको अपना ऑडियो सत्र सेट करने की आवश्यकता है।

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 

इसे जोड़ें और आप जाने के लिए अच्छे होंगे।

+0

यह जवाब होना चाहिए। –

+0

कम से कम कोई इसे महसूस करता है! :) –

+0

जोश, आपको चेकमार्क मिल रहा था, चिंता न करें :) यह एक आकर्षण की तरह काम करता था। स्टैक ओवरफ्लो मेरे धीमी नेटवर्क पर खराब हो रहा था, इसलिए मुझे इसे सही करने के लिए ब्राउजर को बंद करना पड़ा – iwasrobbed

22

आपको शुरुआत करने के लिए कॉल करने की भी आवश्यकता है बैकग्राउंड टास्कविथ एक्सपेरेशन हैंडलर: इससे पहले कि आप एक गीत शुरू करें (चाहे वह फोरग्राउंड में हो या नहीं) और अंत में बैकग्राउंड टास्क समाप्त हो जाए।

यह आईओएस को बताता है कि यदि आप अपने ऐप को पृष्ठभूमि में डालते हैं तो भी आप प्रोसेसिंग जारी रखने में सक्षम होना चाहते हैं। यह एक नया कार्य या धागा नहीं बनाता है, यह आईओएस के लिए सिर्फ एक ध्वज है जिसे आप चलाना चाहते हैं। ऑडियो इसके बिना पूरा होने के लिए खेलेंगे, लेकिन जब आप एक और ट्रैक शुरू करना चाहते हैं तो यह पूरा हो जाएगा, तो आप पृष्ठभूमि में भागने में सक्षम होना चाहिए।

आप इस तरह इसका इस्तेमाल कर सकते हैं:

// ivar, initialized to UIBackgroundTaskInvalid in awakeFromNib 
UIBackgroundTaskIdentifier bgTaskId; 

जब एक ऑडियो प्लेयर हम बचाने bg कार्य आईडी शुरू करने:

if ([audioPlayer play]) { 
    bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; 
} 

अब audioPlayerDidFinishPlaying: कॉलबैक अभी भी हो जाएगा, क्योंकि हम आईओएस बता दिया है कि हम एक ऐसा कार्य कर रहे हैं जिसे हमें पृष्ठभूमि में डालने के बावजूद जारी रखने की आवश्यकता है। इस तरह हम कॉलबैक प्राप्त करते हैं और अगली ऑडियो फ़ाइल शुरू कर सकते हैं।

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)success 
{ 
    UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid; 

    if (self.haveMoreAudioToPlay) { 
     newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; 
     [self playNextAudioFile]; 
    } 

    if (bgTaskId != UIBackgroundTaskInvalid) { 
     [[UIApplication sharedApplication] endBackgroundTask: bgTaskId]; 
    } 

    bgTaskId = newTaskId; 
}  
+0

ऑडियो चलाने के लिए आप पृष्ठभूमि कार्य क्यों शुरू करेंगे। यह बिल्कुल जरूरी नहीं है। –

+0

क्या आपको लगता है कि यह केवल ऐप्पल आवंटित समय के लिए जीवित रहेगा जब आप 'स्टार्टबैकग्राउंड टास्कविथ एक्स्पेरेशन हैंडलर' का अनुरोध करते हैं या जब तक आप ध्वनि को लूप करने या नई ध्वनि चलाने के लिए 'ऑडियोडिडफिनिश प्लेइंग' का उपयोग कर रहे हैं तब तक यह खेलेंगे? – iwasrobbed

+0

+1 ऊपर और उससे आगे जाने के लिए progrmr के लिए +1 क्योंकि मुझे वास्तव में उस चीज़ के लिए भी आवश्यकता होगी जो मैं कर रहा हूं (सुनिश्चित नहीं है कि किसी ने आपको क्यों गिरा दिया है, लेकिन मैं आपके उत्तर की सराहना करता हूं) – iwasrobbed