2011-10-08 13 views
9

अद्यतन: आईओएस 8 (8.3, शायद) के कुछ संस्करणों के अनुसार, जीपीएस हार्डवेयर को हवाई जहाज मोड में भी चालू किया जा सकता है (यानी, आप हवाई जहाज मोड में भी जीपीएस स्थान प्राप्त कर सकते हैं)। यह इस सवाल को प्रस्तुत करता है।यह निर्धारित करना कि आईफोन पर हवाई जहाज मोड सक्षम है या नहीं?

-

क्या यह संभव है प्रोग्राम के निर्धारित करने के लिए एक iPhone हवाई जहाज मोड में है? मैं विशेष रूप से जानना चाहता हूं कि यह एयरप्लेन मोड में है, क्योंकि नेटवर्क कनेक्शन होने (या नहीं) के विपरीत। इस सवाल से बहुत कुछ पूछा गया है, लेकिन मैंने जो भी जवाब देखा है, वह यह निर्धारित करने के लिए ऐप्पल के रीचैबिलिटी कोड को संदर्भित करता है कि नेटवर्क कनेक्शन उपलब्ध है या नहीं।

मैं एक ऐप लिख रहा हूं जो आईफोन के जीपीएस का उपयोग करता है। फिलहाल, यदि हवाई जहाज मोड चालू है और मेरा ऐप लॉन्च किया गया है, तो मेरा स्थान प्रबंधक ऑब्जेक्ट अभी भी मौजूद प्रतीत होता है और अभी भी मुझे एक (कैश?) स्थान दे रहा है। स्टेटस बार में छोटा जीपीएस आइकन दिखाई देता है ताकि मुझे पता चल सके कि मेरा ऐप एक स्थान निर्धारित कर रहा है।

Airplane Mode and GPS arrow indicator

मुझे पता है कि फोन हवाई जहाज मोड में है, ताकि मैं स्थान प्रबंधक वस्तु आरंभ नहीं कर सकते हैं चाहता हूँ और मैं उपयोगकर्ता है कि कार्यक्षमता जीपीएस उपलब्ध नहीं है इंगित करने के लिए मेरी यूआई बदल सकते हैं।

जीपीएस कार्यक्षमता स्पष्ट रूप से नेटवर्क कनेक्टिविटी के बावजूद इस्तेमाल किया जा सकता है, इसलिए नेटवर्क कनेक्टिविटी की कमी मुझे हवाई जहाज मोड के लिए खराब प्रॉक्सी के रूप में मारती है। मुझे कोई विशिष्ट त्रुटियां नहीं मिलती हैं (स्थान प्रबंधक: didFailWithError के माध्यम से) जब हवाई जहाज मोड में, केवल एक सामान्य त्रुटि जो मैं मान रहा हूं वह कई स्रोतों से आ सकती है।

उत्तर

5

मेरे ऐप के लिए इसी तरह की आवश्यकताएं, सिवाय इसके कि मुझे पहले से पता था कि इसका उपयोग "नो सेल सिग्नल" वातावरण (रिमोट एरिया में कैंपिंग) में किया जा सकता है और यह कि उपयोगकर्ता डिवाइस को विमान मोड में रख सकता है बैटरी, इसे महसूस किए बिना जीपीएस बंद कर देता है।

चूंकि हवाई जहाज मोड का परिणाम नहीं हुआ है, तोफ़ाइलविथ त्रुटि, और स्थान सेवाएं सक्षम है हाँ, मैंने 60 सेकंड के लिए टाइमर सेट किया है, और यदि टाइमर की समयसीमा समाप्त होने से पहले कोई जीपीएस रीडिंग नहीं लौटाया जाता है, तो मैं उपयोगकर्ता को एक संदेश दिखाता हूं कि जीपीएस डेटा को पढ़ा नहीं जा सकता है, और सुझाव है कि वे जांचें कि विमान मोड सक्षम नहीं है, और वे सुनिश्चित करते हैं कि उनके पास आकाश का स्पष्ट दृश्य है।

+0

धन्यवाद। यही वह है जो मैंने कर दिया। – smacdonald

+0

त्रुटि संदेश में उपयोगकर्ता को अन्य मामले का उल्लेख किया जाना चाहिए, यह है कि उन्हें यह सत्यापित करना चाहिए कि ऐप को जीपीएस डेटा तक पहुंच प्रदान की गई है। मेरे पास एक उपयोगकर्ता था कि ऐप टूटा हुआ था, केवल यह पता लगाने के लिए कि उसने अनुमति पॉप-अप पर "अनुमति न दें" मारा था। –

+1

आपको 'locationManager: didFailWithError:' विधि में 'kCLErrorDenied' त्रुटि परिणाम प्राप्त करना चाहिए यदि उपयोगकर्ता ने आपके ऐप के लिए स्थान सेवाएं सक्षम नहीं की हैं। मुझे मामले के साथ सौदा करने के लिए एक विशिष्ट त्रुटि संवाद मिला है। यदि डिवाइस फ्लाइट मोड में है, तो आपको जेनेरिक 'केसीएलआरआरएल लोकेशन अज्ञात' त्रुटि मिलती है। – smacdonald

3

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

+0

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

1

एक समाधान take a screenshot of the device पर हो सकता है और उस क्षेत्र में मौजूद रंगों को देखें। अगर वे नारंगी हैं, तो आप हवाई जहाज मोड में हैं।

+3

मुझे आपकी पार्श्व सोच पसंद है, लेकिन मुझे लगता है कि यह समाधान आईओएस के विभिन्न संस्करणों और शायद विभिन्न हार्डवेयर पर तोड़ने के लिए प्रवण होगा। अगर मुझे काम करने के लिए और कुछ नहीं मिल रहा है, तो मैं इसे छोड़ सकता हूं। – smacdonald

+0

हाँ, यह निश्चित रूप से एक हैकी समाधान है। एक अंतर्निहित एपीआई बहुत बेहतर होगा। – ceejayoz

+2

जब आप डिवाइस पर स्क्रीनशॉट लेते हैं तो स्टेटस बार शामिल नहीं होता है। –

0

आपको वास्तव में यह जांचने की कोशिश नहीं करनी चाहिए कि क्या विमान मोड सक्षम है या नहीं। क्या होगा यदि ऐप्पल एयरप्लेन मोड कैसे काम करता है में परिवर्तन करता है, जहां चालू होने पर भी जीपीएस उपकरण सक्षम हो जाएंगे?सबसे अच्छा तरीका है मज़बूती से पता लगाने के लिए कि क्या जीपीएस सेवाओं सक्षम होते हैं CLLocationManagerDelegate को लागू करने और करने के लिए आप क्या आप जानते हैं अगर वहाँ समस्याएं हैं दूँगी इसे पारित कर सकते हैं करते हैं एपीआई यह बताती हैं कि जीपीएस उपलब्ध है या नहीं

NSError की जांच करने के लिए है

+0

हां, लेकिन यह मुझे नहीं बताएगा कि डिवाइस उड़ान के दौरान डिवाइस के कारण जीपीएस अनुपलब्ध है। – smacdonald

+0

हवाई जहाज मोड सेटिंग [CLLocationManager लोकेशन सर्विसेज सक्षम] या [CLLocationManager प्रमाणीकरण स्थिति] के परिणामों को परिवर्तित नहीं करती है। –

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