2012-09-04 5 views
10

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

उत्तर

12

यदि आपको विज्ञापनडेटा NSDictionary से नाम मिलता है तो यह हमेशा वह नाम होगा जो परिधीय द्वारा भेजे गए विज्ञापन पैकेट में होगा।

हालांकि, यदि आप सीबीपीरिफेरल ऑब्जेक्ट की नाम संपत्ति पढ़ते हैं, तो वह नाम भिन्न हो सकता है। हम उस समय हमें सबसे अच्छा नाम प्रदान करने का प्रयास करते हैं। अगर हमने परिधीय से अभी तक कनेक्ट नहीं किया है, तो हम विज्ञापन पैकेट से नाम प्रदान करेंगे। यदि परिधीय से संबंध अतीत में किया गया है, तो हम जीएपी नाम पढ़ लेंगे। हम विज्ञापन पैकेट (विज्ञापन पैकेट की आकार बाधाओं के कारण) में जीएपी नाम 'बेहतर' नाम मानते हैं।

+0

ऐसा लगता है कि काम कर रहा है, मुझे नहीं पता कि 'kCBAdvDataLocalName' मान को परिभाषित किया गया है ताकि मैं इसे शामिल कर सकूं। जब मैं विज्ञापन डेटा प्रिंट करता हूं, तो वह कुंजी है जो नाम के साथ जाती है, लेकिन मुझे नहीं पता कि बिना निरंतर मूल्य –

+2

के बिना इसे कैसे पुनर्प्राप्त किया जाए, मैं कोर ब्लूटूथ फ्रेमवर्क संदर्भ में नाम के लिए कुंजी का पता लगाने में सक्षम था। यह 'CBAdvertisementDataLocalNameKey 'नामक एक आधार है। –

+0

क्या आप लगातार peripheral.name पढ़ने में सक्षम थे? –

3

एकमात्र चीज जो मैंने पाया है कि इस समस्या के आसपास काम करता है स्कैनिंग शुरू करना और स्कैनिंग रोकना है, और अंततः भौतिक अंतरिक्ष में मिलने वाले सभी उपकरणों को गैर-शून्य नाम और गैर-शून्य यूयूआईडी के साथ दिखाया जाता है।

+1

मुझे यह काम नहीं मिल सका। स्कैन रोकने और फिर से शुरू करने के बाद, या यहां तक ​​कि विज्ञापन बंद करना और फिर से शुरू करना, मुझे अभी भी GATT नाम ('आईपैड' मिलता है क्योंकि मेरा डिवाइस आईपैड है)। केवल एक बार मैं peripheral.name = विज्ञापित नाम देखता हूं। लेकिन इस रहस्य को सुनें: यदि परिधीय विज्ञापन डेटा नाम कुंजी में 28 वर्ण का नाम है, तो केंद्रीय विज्ञापन डेटा खाली है, क्योंकि यह बहुत लंबा है (यूयूआईडी के साथ), लेकिन केंद्रीय के periphal.name एक बार 28 वर्ण का नाम दिखाता है। इसमें संभावित है क्योंकि मैं डेटा प्राप्त करने के लिए अतिरिक्त पढ़ने के बदले के बजाय समय और बैटरी बचाने के लिए परिधीय विज्ञापन डेटा में 28 बाइट डेटा पैक कर सकता हूं। मैं यह कैसे कर सकता हूँ? –