दिलचस्प पोस्ट
कुछ फ़ंक्शंस को फ़ंक्शन नाम से पहले और बाद में "__" को क्यों रेखांकित किया जाता है? आईओएस 6 में उपकरण अभिविन्यास को प्रोग्रामेटिक रूप से कैसे बदला जाए ViewPager के हिस्से के रूप में ListFragment में डेटा अपडेट करें मैं कैसे नियंत्रण कर सकता हूं कि एमैक्स बैकअप फ़ाइलों को कैसे बना देता है? के साथ मूल्य जोड़ने से पहले PHP सरणी को घोषित करना आवश्यक है? एक की चौड़ाई संपत्ति बदलने: सीएसएस चयनकर्ता से पहले JQuery का उपयोग कर PHP से jQuery के एजेक्स कॉल पर डेटा कैसे वापस करें अगली एन निष्पादित लाइनों को स्वचालित रूप से जीडीबी में कैसे मुद्रित करें? संसाधनों को प्राप्त / समापन करते समय जावा प्रयास / पकड़ / अंततः सर्वश्रेष्ठ प्रथाओं PHP में अनाम और कार्य का उपयोग क्यों किया जाता है? sqlite3.ऑपरेशन त्रुटि: निकट "?": सिंटैक्स त्रुटि क्या DOMAttrModified के लिए एक विकल्प है जो वेबकिट में काम करेगा Jquery सीएसएस और जेएस सीमित तत्वों सीबीसी मोड में एक गैर-रैंडम IV का इस्तेमाल क्यों किया जा सकता है? Pgadmin के साथ एक heroku डेटाबेस से कनेक्ट करें

ऑडियो चलाने के लिए iOS4 पर पृष्ठभूमि दर्ज करना

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

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

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

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

वेब के समाधान से एकत्रित समाधान "ऑडियो चलाने के लिए iOS4 पर पृष्ठभूमि दर्ज करना"

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

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

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

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

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

आप इसे इस तरह से उपयोग कर सकते हैं:

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

ऑडियो प्लेयर शुरू करते समय हम बीजी टास्क आईडी को बचाते हैं:

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

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

 - (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; }