24

के लिए ब्लूटूथ LE ऐप के लिए पृष्ठभूमि समय समस्या Iphone-4s में मेरे ऐप के लिए कोर-ब्लूटूथ फ्रेमवर्क का उपयोग कर रहा हूं।
यह आमतौर पर एक पृष्ठभूमि ऐप होना चाहिए जो जितना संभव हो सके चला सकता है।आईफोन 4 एस

अब यह केवल 40 मिनट - 1 घंटे अधिकतम के लिए चल रहा है।

मुझे कम से कम 1 दिन या उससे भी ज्यादा की उम्मीद है।

इस "ब्लूटूथ-केंद्रीय" मान के लिए .plist फ़ाइल में "आवश्यक पृष्ठभूमि मोड" कुंजी में जोड़ा गया है।

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

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

क्या ऐप्पल कुछ शर्त बताता है कि किस स्थिति में एक पृष्ठभूमि ऐप (जो 5 श्रेणियों में आने वाले उन निरंतर चल रहे पृष्ठभूमि ऐप में से एक है) विफल रहा है, जिससे यह निलंबित मोड में जायेगा?

"iPhoneAppProgrammingGuide", पर "Communicating with a Bluetooth Accessory" अनुभाग में, जिक्र करते हुए मुझे लगता है कि पता करने के लिए आते हैं, ब्लूटूथ LE आवेदन के लिए लंबे समय से चल रहा है पृष्ठभूमि कार्य के लिए 2 कार्यान्वयन necessory हैं:

1) UIBackgroundModes कुंजी होना चाहिए "ब्लूटूथ केंद्रीय "Info.plist फ़ाइल में। 2) ब्लूटूथ डेटा की पृष्ठभूमि प्रसंस्करण का समर्थन करने वाला कोई ऐप सत्र-आधारित होना चाहिए।

तो मेरे ऐप के लिए, पहला कार्यान्वयन शामिल किया गया था, और उस एप्लिकेशन के साथ पृष्ठभूमि में चलाने में सक्षम है और अधिकतम 1 घंटे की अवधि के लिए सभी कार्यों को करने में सक्षम है।

अब मुझे दूसरे कार्यान्वयन को लागू करने की आवश्यकता है। यानी सत्र-आधारित। दस्तावेज के अनुसार ऐप "निलंबित" स्थिति में होने पर भी ईवेंट प्राप्त करने की अनुमति देगा। मैंने क्लासिक ब्लूटूथ (बाहरी एक्सेसरी फ्रेमवर्क) के लिए मौजूद "EASession" जैसे ब्लूटूथ LE (कोर ब्लूटूथ फ्रेमवर्क) के लिए उपयुक्त उपयुक्त सत्र बनाने का प्रयास किया। लेकिन मुझे यह नहीं मिला।

असल में मुझे यकीन नहीं है कि मुझे कौन सा सत्र वर्ग बीएलई उद्देश्य के लिए उपयोग करने की आवश्यकता है। ऑडियो/वीडियो, नेटवर्किंग और इंटरनेट, बाहरी सहायक, के लिए व्यक्तिगत सत्र कक्षा उपलब्ध है। कोर ब्लूटूथ ढांचे के लिए कोई नहीं है।

क्या कोई मेरी सहायता कर सकता है, कौन सा सत्र वर्ग बीएलई के लिए उपयुक्त है।

+0

जब तक आप चाहें पृष्ठभूमि में भागने में सक्षम होना चाहिए, क्या आपने कभी यह काम किया है? –

+2

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

+0

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

उत्तर

5

मुझे लगता है कि समस्या यह है सरल अपनी स्क्रीन की तरह आप info.plist को लागू करने की कोशिश:

enter image description here
और आप आप ब्लूटूथ, AirPlay वाईफाई और अधिक सक्षम करने के लिए didFinishLaunchingWithOptions तहत AppDelegate.m पर समारोह में जोड़ सकते हैं चाहते हैं, यह केवल एक उदाहरण कोड है, लेकिन मुझे लगता है कि आपकी मदद कर सकते हैं।

NSError *sessionError = nil; 
[[AVAudioSession sharedInstance] setDelegate:self]; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError]; 
[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); 

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

आशा है कि यह आपकी मदद कर सके।

संबंधित मुद्दे