2015-04-18 11 views
6

डिस्कनेक्ट करता है मैं आईओएस 8.3 में एक अजीब बग देख रहा हूं और सोच रहा हूं कि कोई और एक ही चीज़ देख रहा है।कोर ब्लूटूथ: सीबीपीरिफेरल प्रत्येक ~ 10 सेकंड

मेरे पास बहुत करीब निकटता में एक आईपैड एयर (केंद्रीय मोड में) और एक आईफोन 6 (पेरिफेरल मोड में) है।

  • मेरे CBCentralManager एक सीरियल पृष्ठभूमि कतार और CBCentralManagerOptionRestoreIdentifierKey विकल्प के साथ आरंभ नहीं हो जाता
  • प्रबंधक CBCentralManagerScanOptionAllowDuplicatesKey: true विकल्प
  • centralManager:didDiscoverPeripheral: के भीतर मैं बाह्य उपकरणों की एक सूची है कि पहले से ही खोज कर रहे हैं के खिलाफ जांच का उपयोग कर बाह्य उपकरणों के लिए स्कैनिंग शुरू होता है:
let connect:() ->() = { 
    peripheral.delegate = self 
    self.devices[peripheral.identifier.UUIDString] = peripheral 
    self.manager.connectPeripheral(peripheral, options: nil) 
} 

if let device = devices[peripheral.identifier.UUIDString] { 
    if device.peripheral.state == .Disconnected { 
    connect() 
    } 
} else if peripheral.state == .Disconnected { 
    connect() 
} 
  • एक बार कनेक्ट होने पर, मैं सेवाओं और विशेषताओं को खोजता हूं।

परिधीय अब डिस्कनेक्ट के बारे में 10 सेकंड के बाद, तुरंत फिर से खोज की और फिर से जोड़ता है। 10 सेकंड बाद यह प्रक्रिया खुद को दोहराती है।

क्या यह एक बग है या क्या मैं यहां कुछ गलत कर रहा हूं?

मैंने परिधीय पर एक विशेषता की सदस्यता लेने की भी कोशिश की है, लेकिन ऐसा कुछ भी नहीं दिख रहा था।

+1

मैं एक iOS8.3 डिवाइस पर अपने परीक्षण एप्लिकेशन का इस्तेमाल किया के साथ विशेषता के लिए सब्सक्राइब करना चाहिए और मैं इस नहीं दिख रहा है - एक Fitbit फ्लेक्स परिधीय और के रूप में एक और iOS डिवाइस के साथ दोनों एक परिधीय क्या कोई विशेष कारण है कि आप अनुमति डुप्लीकेट कुंजी सेट कर रहे हैं? यह आमतौर पर आवश्यक नहीं है और बैटरी नाली जाती है। मुझे बीएलई परिधीय कनेक्शन के घंटों तक कनेक्शन बनाए रखने में कोई समस्या नहीं है। – Paulw11

+0

धन्यवाद पॉल, मैं आरएसएसआई के आधार पर कार्यों को करने के लिए डुप्लीकेट कुंजी का उपयोग कर रहा हूं। क्या आप एक बार परिधीय से जुड़ते हैं? आप किस विशेषताओं को पढ़ते/लिखते/सदस्यता लेते हैं? परिधीय अद्यतन लगातार मूल्यों को महत्व देता है? मुझे लगता है कि इसके साथ कुछ करने के लिए हो सकता है? – desktop

+0

मैं एक बार परिधीय से कनेक्ट करता हूं। यदि आप जुड़े परिधीय के आरएसएसआई मान प्राप्त करना चाहते हैं, तो आप 'readRSSI' सीबीपीरफेरल विधि का उपयोग कर सकते हैं। मेरा नमूना कोड किसी भी विशेषता – Paulw11

उत्तर

7

यह एक अपेक्षित व्यवहार है। ब्लूटूथ को बहुत कम ऊर्जा का उपभोग करने के लिए डिज़ाइन किया गया था ताकि यह जितनी जल्दी हो सके कनेक्शन को छोड़ देता है। कम से कम आईओएस 7 में परिधीय डिवाइस को फिर से खोजना आवश्यक नहीं था - आप डिस्कनेक्शन के बाद पहले से ही खोजे गए डिवाइस से पुनः कनेक्ट करने में सक्षम थे।

  1. डिस्कवर
  2. कनेक्ट
  3. पढ़ें/सब आप के रूप में की जरूरत है लिखें: मैं बहुत यकीन है कि यह BLE साथ काम करने के लिए यदि आप एक स्थायी कनेक्शन है की जरूरत नहीं है सुझाया गया तरीका आईओएस 8. के ​​लिए सच भी है हूँ जल्द से जल्द
  4. सेटअप टाइमर
  5. टाइमर आग 2

बात करने के लिए आप (एक स्थायी कनेक्शन की आवश्यकता उदाहरण के लिए आप डेटा abo लेने के लिए की जरूरत है जाते हैं वास्तविक समय में केन्द्र शासित प्रदेशों के दिल की दर) आप - setNotifyValue:forCharacteristic:

When you enable notifications for characteristic’s value, the peripheral calls the peripheral:didUpdateNotificationStateForCharacteristic:error: method of its delegate object to notify your app when the characteristic’s value changes. Because it is the peripheral that chooses when to send an update, your app should be prepared to handle them as long as notifications or indications remain enabled.

+0

धन्यवाद, मैंने कनेक्शन के बाद एक परिधीय अधिसूचना विशेषता की सदस्यता लेने की कोशिश की है, लेकिन फिर भी कनेक्शन गिरा दिया गया है। क्या आपको पता है कि दो डिवाइसों को जुड़े रहने के लिए अधिसूचना विशेषता वास्तव में किसी भी डेटा को उत्सर्जित करने की आवश्यकता है? – desktop

+0

@desktop हां, इसे कुछ डेटा उत्सर्जित करना चाहिए लेकिन मुझे नहीं पता कि कितनी बार। शायद इसे बीएलई विनिर्देश के अंदर कहीं भी वर्णित किया गया है https://www.bluetooth.org/en-us/specification/adopted- स्पेसिफिकेशंस – Avt

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