2015-02-13 3 views
12

मैं एंड्रॉइड में बीएलई विकसित कर रहा हूं, मैं बीएलई डिवाइस को स्कैन, कनेक्ट और लिख सकता हूं।एंड्रॉइड में बीएलई के लिए निरंतर विशेषता तेजी से और स्थिर कैसे लिखें?

मैं BluetoothGatt और characteristic से AsyncTask पर Button पर क्लिक करने के लिए निम्न फ़ंक्शन को कॉल करने के लिए निम्न फ़ंक्शन को कॉल करता हूं।

write_btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     new WriteCharacteristic(mBluetoothGatt , HueCharacteristic).execute(); 
    } 
}); 

लिखने विशेषता के कोड निम्नलिखित की तरह है:

private class WriteCharacteristic extends AsyncTask<String, Void, String> { 

     public BluetoothGatt mGatt; 
     public BluetoothGattCharacteristic mCharacteristic; 

     public WriteCharacteristic(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic){ 
      mGatt = gatt; 
      mCharacteristic = characteristic; 
     } 

     @Override 
     protected String doInBackground(String... urls) { 
      mGatt.writeCharacteristic(mCharacteristic); 
      return null; 
     } 
    } 

लेकिन मैं बटन पर क्लिक करें लगातार कोशिश, ऐसा लगता है एंड्रॉयडBLE डिवाइस के लिए हर characteristic नहीं लिखा था ।

यदि मैं लगातार 5 बार के लिए बटन क्लिक करता हूं, तो यह 1 ~ 3 बार नुकसान होगा। यह केवल दो बार के लिए characteristicको BLE डिवाइस लिखें।

प्रश्न:

Is there any better way to write characteristic consecutive and stable to BLE device for Android?

उत्तर

16

पढ़ने/Android की Bluetooth स्टैक में विशेषता प्रणाली बारे में कई कार्यों कतार में अच्छा नहीं है। किसी अन्य के साथ भेजने से पहले आपको परिचालनों को पूरा करने की प्रतीक्षा करनी होगी। इसके अतिरिक्त, चूंकि आपका कोड AsyncTask का उपयोग कर रहा है, इसलिए आपको कुछ उपकरणों पर कार्यों के समानांतर निष्पादन मिलेगा, इसलिए जब भी आप बार-बार बटन दबाते हैं तो अनुरोधों को क्रमबद्ध नहीं किया जा रहा है।

ढांचे से स्थिर परिणाम प्राप्त करने के लिए, आपको अपने अनुरोधों को स्वयं कतारबद्ध करने और अगली कमांड भेजने से पहले ट्रिगर करने के लिए BluetoothGattCallbackonCharacteristicWrite() की प्रतीक्षा करनी होगी। आपके कोड को GATT ऑब्जेक्ट की सभी पहुंच सिंक्रनाइज़ करने की आवश्यकता है, ताकि अगले writeCharacteristic() पूर्ण अनुरोध के लिए पूर्ण कॉलबैक आग तक पहुंचने तक कभी न आए।

+2

जब हम कई (2+) अधिक बीएलई उपकरणों के साथ संवाद करते हैं, तो क्या हमें एक ही कतार में सभी लिखने के लक्षण और वर्णनकर्ताओं को कतारबद्ध करना चाहिए और रिकॉर्ड रखना चाहिए कि उन्हें किस गैट को लिखा जाना चाहिए या उनके पास अलग-अलग कतार हो सकती हैं ताकि gatt1.writeCharacteristics (। ।) और gatt2.writeCharacteristics (..) संभवतः एक ही समय में लिखे गए हैं? 10q – Ewoks

+1

@ डेवुनवार्ड मेरे पास इवोक्स के समान प्रश्न है, क्या आप इसे थोड़ा सा समझा सकते हैं? – Felix

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